为了账号安全,请及时绑定邮箱和手机立即绑定

现代语法与旧语法的循环

现代语法与旧语法的循环

月关宝盒 2021-04-20 17:17:26
我有这段代码可以使用现代语法成功运行。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}如何返回与上一个示例相同的内容?两者之间的唯一区别是,前者使用了现代循环功能
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您应该将密钥设置为 str[char]


str[char]是str索引处的字符char

char 是一个数字变量。

function maxChar(str) {

  const charMap = {}

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

    charMap[str[char]] = 1

  }


  return charMap

}


console.log(maxChar('acdef'))


查看完整回答
反对 回复 2021-04-22
?
喵喔喔

TA贡献1735条经验 获得超5个赞

因为使用for...of带有字符串,char所以分配了值str[index]。要对旧语法执行相同操作,请使用charMap[str[char]]:


function maxChar(str) {

  const charMap = {}

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

    charMap[str[char]] = 1;

  }

  return charMap;

}


console.log(maxChar('acdef'));

您还可以简化功能:


function maxChar(str) {

  const charMap = {};

  str.split("").forEach(function(char) {

    charMap[char] = 1;

  });

  return charMap;

}


console.log(maxChar('acdef'))


查看完整回答
反对 回复 2021-04-22
?
萧十郎

TA贡献1815条经验 获得超13个赞

charfor循环中的变量是循环计数器,它是一个数字。为了使它更具可读性,我建议将其重命名为i,广泛用于for循环。


使用此计数器,您可以使用以下命令访问您的角色str[i]:


function maxChar(str) {

  const charMap = {}

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

    charMap[str[i]] = 1

  }

  return charMap

}


console.log(maxChar('acdef'))

您也可以使用Array.prototype.reduce()来做到这一点:


const maxChar = str => [...str].reduce((map, x) => ({ ...map, [x]: 1 }), {})


console.log(maxChar('acdef'))


查看完整回答
反对 回复 2021-04-22
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信