如何将数值数组映射到对象数组的指定属性中?
解决数组值映射到对象数组属性的问题
这个需求其实很简单,既然你已经明确两个数组长度完全匹配,咱们直接利用循环的索引就能轻松把myArray里的值对应到myProducts每个对象的shipping属性上,下面给你两种常用的实现方式:
方式一:直接修改原对象数组
如果你不需要保留原myProducts的原始结构,想直接在原对象上添加shipping属性,可以用forEach循环——它的回调函数能拿到当前遍历的索引,刚好用来匹配myArray的对应位置:
var myArray = ['2', '4', '7']; var myProducts = [ {id: '755', price: '10'}, {id: '756', price: '20'}, {id: '757', price: '30'} ]; myProducts.forEach(function(obj, index) { // 利用索引直接对应赋值 obj.shipping = myArray[index]; }); // 此时myProducts里的每个对象都新增了shipping属性 console.log(myProducts);
方式二:生成新的对象数组(不修改原数据)
如果想保留原myProducts不变,生成一个包含shipping属性的新数组,可以用map方法,它会返回一个全新的数组,不会影响原数据:
var myArray = ['2', '4', '7']; var myProducts = [ {id: '755', price: '10'}, {id: '756', price: '20'}, {id: '757', price: '30'} ]; var updatedProducts = myProducts.map(function(obj, index) { // 展开原对象的所有属性,再添加shipping属性,返回新对象 return { ...obj, shipping: myArray[index] }; }); // updatedProducts是新数组,原myProducts完全不受影响 console.log(updatedProducts);
补充说明
你一开始想在forEach里嵌套Array.prototype.map其实没必要,因为map是用来遍历数组生成新数组的工具,而这里每个对象只需要对应myArray里的单个值,直接通过索引取值是最简洁高效的方式。
内容的提问来源于stack exchange,提问作者asw1984
相关产品推荐
相关产品推荐

