还是有点“不一样”

261 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

兄弟们,啥也不说了,昨天的题我看效果不错,确实帮助到了大家,那么今天我决定再来点特别的题——手写数组的'forEach'(实现一个简易的forEach即可)。要注意,不是用手写,而是polyfill

分析

要注意forEach有哪些特点,比如不可以使用return跳出等等

昨日题

题目

t.jpg

答案

无固定答案,下面展示部分昨天留言的代码:

// FuncJin wrote it on 2022/06/04 23:17
var FuncJin = () => {
     var map = new Map([["one", "one1"],["two", "two2"],["three", "three3"]])
     return s.replace(/one|two|three/g, v => map.get(v))
}
// 小小栗 wrote it on 2022/06/05 10:11
var XxLi = function () {
     var arr = [['one', 'one1'], ['two', 'two2'], ['three', 'three3']]
     var arr2 = s.split(' ')
     return arr2.map(v => {
         var r = arr.find(v2 => new RegExp(v2[0], 'i').test(v))
         return r ? r[1] : v
     }).join(' ')
 }
// 冰阔落治百病 wrote it on 2022/06/05 12:08
var WangLaoQi = function() {
  let matcMap = {
    "one": "one1",
    "two": "two2",
    "three": "three3"
  }
  return s.split(" ").map(value => matcMap[value] ?? value).join(" ");
}
// char wrote it on 2022/06/05 15:47
const char = () => {
    const obj = {
	"one": "one1",
        "two": "two2",
        "three": "three3"
    }
    return s.split(' ').reduce((previous, current,index) => obj[current] ? previous+ obj[current] + " " : previous + current + " "  , "").trim()
}

解析

首先这道题的题目是存在一点争议的,具体表现为:var s = 'one two three',因为图片中为中文引号(在这里我也要痛斥一些面试题目,能不能规范点出题,引号、冒号、分号请使用英文,避免混淆题意),所以有的读者可能理解成了var s = ' one two three',要注意这个one前面是有一个空格的,所以这也就导致了部分人使用split方法分割字符串时,会将第一个空格也分割出来了,从而进行一些不必要的操作,那么我认为one之前是不存在空格的,所以也就按照了没有空格的写法,如果真的有空格,你可以使用正则/^\s*|\s*$/或者字符串的trim方法来清除空格,或者你也可以保留原有空格。因为篇幅有限,这里我对第四种代码讲解一下思路和方法,大概就是通过reduce方法来不断累加新值,因为前者split已经将one two three转为了数组['one', 'two', 'three'](previous, current,index) => obj[current] ? previous+ obj[current] + " " : previous + current + " "的作用就是如果当前的值currentobj中,那么就将current替换为obj中的值,如果不在obj中,则返回原汁原味的previous,要注意的是每次的previous都是对前面值的累加,最后通过trim去除两端空格,然后返回新值。

结语

此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!