如何使用JavaScript的reduce()方法将数组元素填充到对象对应键?
问题核心
你的代码没跑出预期结果,问题出在赋值的键不对:reduce回调里直接拿数组的数字索引当对象键写值,最后只会给对象挂上"0"、"1"、"2"三个新属性,根本没碰你提前定义好的first、second、third三个键,这三个键没被重新赋值,自然一直是null。
修正代码
你只要先把预定义对象的键按顺序取出来,让数组索引和对象键一一对应上赋值就行。优先推荐不修改原对象的写法,避免意料之外的副作用:
const myObj = { first: null, second: null, third: null } const myArr = [ "abc", "def", "ghi"] // 按定义顺序拿到对象的键列表:['first', 'second', 'third'] const objKeys = Object.keys(myObj) const newObj = myArr.reduce((result, value, index) => { // 用对应位置的预定义键赋值,不要直接用数组的数字索引 result[objKeys[index]] = value return result // 初始值传原对象的浅拷贝,不会改动最开始定义的myObj }, {...myObj}) console.log(newObj) // 输出:{ first: "abc", second: "def", third: "ghi" }
如果你确定后续不会再用到原始的myObj,也可以直接把myObj作为reduce的初始值传入,省去浅拷贝的步骤,但这种写法会直接修改原对象,日常开发中如果不确定原对象的用途,不建议这么写。
内容的提问来源于stack exchange,提问作者Dariusz Legizynski
相关产品推荐
相关产品推荐

