JAVASCRIPT中的reduce()
方法用于迭代数组,并根据某些逻辑从数组中累加单个值.
让我们来分析一下代码:
const occurrences = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4].reduce(function (acc, curr) {
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
}, {});
reduce()
方法有两个参数:
在array的每个元素上执行的function.这个function接受两个参数:accumulator(acc
)和正在处理的当前值(curr
).accumulator是在function的每次迭代中返回和累加的值.
accumulator的可选初始值.在这种情况下,初始值是空对象{}
.
让我们来看看作为第一个参数传递给reduce()
的function:
function (acc, curr) {
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
}
在每次迭代中,该函数判断当前值(curr
)是否已作为关键字存在于累加器(acc
)中.如果是,则递增key中的value.如果不是,则将key加到value为1的累加器上.
拆解一下逻辑:
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
acc[curr] ?
:这判断电流value(curr
)是否作为key存在于累加器(acc
)中.
++acc[curr]
:如果键存在,则递增与该key相关联的值.
: acc[curr] = 1
:如果key不存在,则将key与累加器相加,值为1.
, acc
:最后,返回更新后的累加器.
在每次迭代中,reduce()
方法要么递增现有数字的计数,要么将acc
对象中新数字的计数初始化为1.
在所有迭代完成后,累加器对象的最终值被赋给事件变量并打印到控制台:
console.log(occurrences) // {2: 5, 4: 1, 5: 3, 9: 1}
这表明在原始数组中,数字2出现5次,数字5出现3次,数字4出现1次,数字9出现1次.