如何在javascript的reduce方法中访问累加器作为对象

时间:2017-11-12 05:59:04

标签: javascript object reduce

我一直在努力解决为什么这不起作用。我们从{}开始,然后抓取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}
    },{});
};

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), {});