使用for循环的Javascript对象迭代

时间:2017-02-15 23:49:09

标签: javascript object iteration hashtable

我正在尝试计算字符串中出现的唯一字符的时间。 但我被困在对象迭代中,无论同一个角色多次出现多次,它只返回1:



function allUniqueCha(word) {
  var wordObj = {};
  var wordArray = word.split([, ]);
  wordArray.forEach(function(c) {
    wordObj[c] = +1;
  });
  console.log(wordArray);
  console.log(wordObj);
}

allUniqueCha("Bubble")




输出为:{B:1,u:1,b:1,l:1,e:1}但键的预期值" b"应该是2.

3 个答案:

答案 0 :(得分:4)

您写道:

 wordObj[c]=+1;

使用一些格式:

 wordObj[c] = +1;

您始终为该值指定+1,此处没有增量。尝试

 wordObj[c] = (wordObj[c] || 0)+1;

并且

var wordArray = word.split([, ]);

应该是

var wordArray = word.split("");



function allUniqueCha(word) {
  var wordObj = {};
  var wordArray = word.split("");
  wordArray.forEach(function(c) {
    wordObj[c] = (wordObj[c] || 0) +1;
  });
  console.log(wordArray);
  console.log(wordObj);
}

allUniqueCha("Bubble")




答案 1 :(得分:1)

当你这样做时:

wordObj[c] = +1;

您要将值+1分配给该属性。你想要做的是将值增加1,所以:

wordObj[c] += 1;

但是,最初wordObj[c]不存在,因此您尝试增加 undefined ,这会引发错误。因此,您必须测试该属性是否存在,如果不存在,请将其初始化为它。

function allUniqueCha(word) {
  var wordObj = {};
  var wordArray = word.split([, ]);
  wordArray.forEach(function(c) {
    if (!wordObj.hasOwnProperty(c)){
      wordObj[c] = 0;
    }
    wordObj[c] += 1;
  });
  console.log(wordArray);
  console.log(wordObj);
}

allUniqueCha("Bubble")

您还可以使用 reduce

function allUniqueCha(word) {
  return word.split('').reduce(function(acc, c) {
    acc[c] = (acc[c] || 0) + 1;
    return acc;
  },{});
}

console.log(allUniqueCha("Bubble"));

答案 2 :(得分:0)

这可以在你最初的帖子中重新思考。这是解决您正在寻找的问题的一种方法。

NavBarItem