猿问

现代语法与旧语法的循环

我有这段代码可以使用现代语法成功运行。


function maxChar(str) {

  const charMap = {}

  for(let char of str){

    charMap[char] = 1

  }


  return charMap

}


console.log(maxChar('acdef'))

它返回这样的对象:


{a:1,c:1,d:1,e:1,f:1}

我想做同样的事情,但使用的是旧语法。我是那样做的,但是没有用。


function maxChar(str) {

  const charMap = {}

  for(let char=0; char < str.length; char++){

    charMap[char] = 1

  }


  return charMap

}


console.log(maxChar('acdef'))

返回此:


{0:1,1:1,2:1,3:1,4:1}

如何返回与上一个示例相同的内容?


两者之间的唯一区别是,前者使用了现代循环功能


月关宝盒
浏览 166回答 3
3回答

慕桂英546537

您应该将密钥设置为 str[char]str[char]是str索引处的字符charchar 是一个数字变量。function maxChar(str) {&nbsp; const charMap = {}&nbsp; for(let char=0; char < str.length; char++){&nbsp; &nbsp; charMap[str[char]] = 1&nbsp; }&nbsp; return charMap}console.log(maxChar('acdef'))

喵喔喔

因为使用for...of带有字符串,char所以分配了值str[index]。要对旧语法执行相同操作,请使用charMap[str[char]]:function maxChar(str) {&nbsp; const charMap = {}&nbsp; for (let char = 0; char < str.length; char++) {&nbsp; &nbsp; charMap[str[char]] = 1;&nbsp; }&nbsp; return charMap;}console.log(maxChar('acdef'));您还可以简化功能:function maxChar(str) {&nbsp; const charMap = {};&nbsp; str.split("").forEach(function(char) {&nbsp; &nbsp; charMap[char] = 1;&nbsp; });&nbsp; return charMap;}console.log(maxChar('acdef'))

萧十郎

charfor循环中的变量是循环计数器,它是一个数字。为了使它更具可读性,我建议将其重命名为i,广泛用于for循环。使用此计数器,您可以使用以下命令访问您的角色str[i]:function maxChar(str) {&nbsp; const charMap = {}&nbsp; for (let i = 0; i < str.length; i++){&nbsp; &nbsp; charMap[str[i]] = 1&nbsp; }&nbsp; return charMap}console.log(maxChar('acdef'))您也可以使用Array.prototype.reduce()来做到这一点:const maxChar = str => [...str].reduce((map, x) => ({ ...map, [x]: 1 }), {})console.log(maxChar('acdef'))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答