Javascript reduce() - 返回行有什么作用?

时间:2017-12-04 21:50:32

标签: javascript arrays reduce

我知道它在最基本的例子中确实减少了(),但是没有像这样,特别是返回线。如果有人可以解释它是如何工作的,或者提出一个更容易理解的例子来返回相同的结果,那就太棒了。

var line = 'abazzzzax'
var obj = line.split('').reduce(function(p, c){
    return (p[c] = ++p[c] || 1, p);
}, {});
console.log(obj)
// Output => { a: 3, b: 1, z: 4, x: 1 }

3 个答案:

答案 0 :(得分:2)

函数的内部部分可以像这样重写:

var obj = line.split('').reduce(function(p, c){
    if (!p[c]) {
        p[c] = 1;
    } else {
        ++p[c];
    }
    return p;
}, {});

拆分此表达式:

p[c] = ++p[c] || 1

p[c]尚不存在时,则值为undefined++(undefined)返回NaN这是一个虚假语句,因此p[c]的值将为1.当p[c]确实存在时,该值会递增,然后重新分配给本身。像i = ++i这样的东西,在我看来有点令人困惑。

最后,逗号运算符允许您从左到右依次运行表达式,因此返回最终表达式,即跟踪事件的p对象。

答案 1 :(得分:1)

reduce函数在此示例中包含2个参数。

p - >初始状态为{}

c - >每次迭代的值aba .....

p[c] = ++p[c] || 1 //If the `key` is already available we increment it by 1 or set it to 1.

因此我们首先更新它并返回包含更新对象的p,这是由逗号运算符引起的。

答案 2 :(得分:1)

它计算字符串中每个字符的出现次数。

基本上

if accumulator[character] exists, increase number stored in accumulator[character] by 1 (this happens if we have set it already to 1, somewhere in the past, because otherwise it will not exist)
else set accumulator[character] to 1 (this happens when we notice a first character of a new kind)
return accumulator object