我正在尝试计算字符串中出现的唯一字符的时间。 但我被困在对象迭代中,无论同一个角色多次出现多次,它只返回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.
答案 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