我一直在努力解决为什么这不起作用。我们从{}开始,然后抓取split字符串数组的第一个元素。如果该对象属性存在,则将该值增加1。如果没有,那么创建属性并将值设置为1.任何帮助都会非常感激,因为我显然缺少有关reduce方法的内容。
const countCharacters = string => {
return string.split('').reduce((total, element) => {
if (total[element]) {
return total[element] += 1;
} else {return total[element] = 1}
},{});
};
答案 0 :(得分:1)
如果希望total
在每次迭代中都是一个Object,则需要从上一次迭代中返回该对象
目前,您的代码返回的Number =不是您用
开头的对象以下是您的代码所发生的事情
'abca'.split('').reduce((total, element) => {
if (total[element]) {
return total[element] += 1;
} else {
return total[element] = 1;
}
},{});
第一次迭代.. total = {},element ='a',返回total.a = 1(返回1)
第二次迭代.. total = 1,element ='b'......
所以,你需要这样的东西:
const countCharacters = string => {
return string.split('').reduce((total, element) => {
if (total[element]) {
total[element] += 1;
} else {total[element] = 1}
return total;
},{});
};
或者,更简洁
const countCharacters = string => string.split('').reduce((total, element) => {
total[element] = (total[element] || 0) + 1;
return total;
}, {});
或者,不那么简洁,但只是一个班轮
const countCharacters = string => string.split('').reduce((total, element) => (total[element] = (total[element] || 0) + 1, total), {});