javascript - 循环的现代语法与旧语法

标签 javascript arrays string object ecmascript-6

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

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}

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

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

最佳答案

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

关于javascript - 循环的现代语法与旧语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55569270/

相关文章:

javascript - 如果在 ng-repeat 中至少选中一个复选框,则设置按钮验证

java - BFS 的三个计数器阵列和两个具有不同启发式的 A* 的相同结果

php - 如何组合两个数组并重复其中一个数组直到另一个数组的长度?

java - 如何修复此错误 :"Cannot invoke getFirst() on the primitive type char"?

python - 检查字符串列表是否被准确找到 n 次

string - MATLAB:使用 'eval' 计算字符串的替代方法

javascript - jQuery:没有动画的 slideDown 令人不快地即时

javascript - 未捕获的类型错误 : Failed to execute 'getComputedStyle' on 'Window' : parameter 1 is not of type 'Element'

javascript - 如何在 React 中将 id 传递给 componentdidmount

java - java中的空整数数组