如何使用map遍历数组并构建指定键值对结构的对象?
解决数组转指定结构对象的问题
你原代码的问题在于误用了map方法——map的作用是将数组转换为另一个数组,它会返回一个新数组,而非帮你构建对象。你把map的结果赋值给obj1,最后得到的会是一个由undefined组成的数组(因为你的回调函数没有返回值),完全不符合预期。
下面是几种正确的实现方式:
方法1:用forEach遍历赋值
这是最直观的写法,直接遍历数组,给空对象逐个添加属性:
const arr = [ {id:0,name:'Mark'} , {id:1,name:'Ron'}, {id:2,name:'Henry'}, {id:3,name:'Rose'}]; let obj1 = {}; arr.forEach(item => { obj1[item.name] = false; }); // 结果:{ Mark: false, Ron: false, Henry: false, Rose: false }
方法2:用reduce累加对象
reduce是专门用来将数组"缩减"为单个值的方法,这里可以直接把数组累加成目标对象:
const arr = [ {id:0,name:'Mark'} , {id:1,name:'Ron'}, {id:2,name:'Henry'}, {id:3,name:'Rose'}]; const obj1 = arr.reduce((result, item) => { result[item.name] = false; return result; }, {}); // 第二个参数是初始值,这里传空对象
方法3:用Object.fromEntries转换
先通过map把原数组转成[键, 值]格式的数组,再用Object.fromEntries直接转成对象:
const arr = [ {id:0,name:'Mark'} , {id:1,name:'Ron'}, {id:2,name:'Henry'}, {id:3,name:'Rose'}]; const obj1 = Object.fromEntries(arr.map(item => [item.name, false]));
内容的提问来源于stack exchange,提问作者MagnusEffect
相关产品推荐
相关产品推荐

