【问题标题】:Modern syntax vs old syntax for loops循环的现代语法与旧语法
【发布时间】:2019-08-29 08:34:45
【问题描述】:

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

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}

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

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

【问题讨论】:

  • 在第一种情况下,char 是一个字符串,因为 for.. of 行为,因为字符串是 iterables。在第二种情况下,char 是一个 number,在 for 循环中用作 counter。您应该使用char 来获取str 索引:const _char = str[char]; charMap[_char] = 1。在此处阅读有关 for.. of 工作原理的更多信息:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript arrays string object ecmascript-6


【解决方案1】:

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

  • str[char] 是索引 charstr 的字符
  • char 是一个数字变量。

function maxChar(str) {
  const charMap = {}
  for(let char=0; char < str.length; char++){
    charMap[str[char]] = 1
  }

  return charMap
}

console.log(maxChar('acdef'))

【讨论】:

  • Maheer Ali 你知道有什么app网站做这个翻译吗?在新语法和旧语法之间?
  • @claudiobitar tbh 我不知道,但有些人说 babel。(我不知道如何使用它。)
  • 谢谢我也听过 babel。我去看看。
【解决方案2】:

因为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'))

【讨论】:

    【解决方案3】:

    for 循环中的变量char 是循环计数器,它是一个数字。为了使其更具可读性,我建议将其重命名为 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'))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 2015-02-08
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      相关资源
      最近更新 更多