我是想解决别人的问题 Array.prototype.reduce 和 ...object 破坏结构。我不明白为什么当我使用 Object.assign ,但在使用Spread运算符时不会。
Array.prototype.reduce
...object
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 通常用于返回新值。即使它使累加器发生变异,也可以安全地假设它可以返回一个新值。
reduce
arr.reduce(reducer, obj) 就凭这个 obj 变异。 reducer2 确实,这就是它工作的原因。但这与 reducer 使累加器保持不变。
arr.reduce(reducer, obj)
obj
reducer2
reducer
应该是:
obj = arr.reduce(reducer, obj);