Array.reduce 中对象解构的使用
Usage of object destructuring in Array.reduce
我试图使用 Array.prototype.reduce
和 ...object
解构来解决另一个人关于 SO 的问题。我不明白为什么它在我使用 Object.assign
时按预期工作,但在使用扩展运算符时却没有。
const str = 'Jack:13,Phil:15,Lucy:12'
const arr = str.split(',')
let reducer = (acc, val) => {
return { ...acc,
...{
[val.split(':')[0]]: Number(val.split(':')[1])
}
}
}
let reducer2 = (acc, val) => {
return Object.assign(acc, {
[val.split(':')[0]]: Number(val.split(':')[1])
})
}
let obj = {
Jody: 29
}
let obj2 = {
Julie: 28
}
arr.reduce(reducer, obj)
arr.reduce(reducer2, obj2)
console.log(obj)
/* output:
{
"Jody": 29
}
*/
console.log(obj2)
/* output:
{
"Julie": 28,
"Jack": 13,
"Phil": 15,
"Lucy": 12
}
*/
数组reduce
经常被用来return一个新值。即使它改变了累加器,也可以安全地假设它可以 return 一个新值。
arr.reduce(reducer, obj)
依赖于 obj
发生了变异。 reducer2
确实改变了原始对象,这就是它起作用的原因。但这与保持累加器不可变的 reducer
相矛盾。
应该是:
obj = arr.reduce(reducer, obj);
我试图使用 Array.prototype.reduce
和 ...object
解构来解决另一个人关于 SO 的问题。我不明白为什么它在我使用 Object.assign
时按预期工作,但在使用扩展运算符时却没有。
const str = 'Jack:13,Phil:15,Lucy:12'
const arr = str.split(',')
let reducer = (acc, val) => {
return { ...acc,
...{
[val.split(':')[0]]: Number(val.split(':')[1])
}
}
}
let reducer2 = (acc, val) => {
return Object.assign(acc, {
[val.split(':')[0]]: Number(val.split(':')[1])
})
}
let obj = {
Jody: 29
}
let obj2 = {
Julie: 28
}
arr.reduce(reducer, obj)
arr.reduce(reducer2, obj2)
console.log(obj)
/* output:
{
"Jody": 29
}
*/
console.log(obj2)
/* output:
{
"Julie": 28,
"Jack": 13,
"Phil": 15,
"Lucy": 12
}
*/
数组reduce
经常被用来return一个新值。即使它改变了累加器,也可以安全地假设它可以 return 一个新值。
arr.reduce(reducer, obj)
依赖于 obj
发生了变异。 reducer2
确实改变了原始对象,这就是它起作用的原因。但这与保持累加器不可变的 reducer
相矛盾。
应该是:
obj = arr.reduce(reducer, obj);