我正在尝试将值数组映射到对象数组中的属性。
var myArray = ['2', '4', '7'];
var myProducts = [
{id: '755', price: '10'},
{id: '756', price: '20'},
{id: '757', price: '30'}
];
请注意myArray
的长度始终等于myProducts
中的对象数。
我的第一个想法是遍历myProducts
中的对象,然后将myArray
映射到该循环内的shipping
属性:
myProducts.forEach(function(obj) {
obj.shipping = Array.prototype.map(myArray);
});
但这不起作用,我现在也在质疑我是否应该在.map
循环中使用forEach
。最好的方法是什么?
期望的结果:
var myProducts = [
{id: '755', price: '10', shipping: '2'},
{id: '756', price: '20', shipping: '4'},
{id: '757', price: '30', shipping: '7'}
];
答案 0 :(得分:2)
您可以获取索引并将值分配给属性
var myArray = ['2', '4', '7'],
myProducts = [{ id: '755', price: '10' }, { id: '756', price: '20' }, { id: '757', price: '30' }];
myProducts.forEach((o, i) => o.shipping = myArray[i]);
console.log(myProducts);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
一种方法是使用[^\w\s]*
的回调的第二个参数,它给你迭代器的索引:
.forEach(
答案 2 :(得分:1)
只需使用常规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];
});
console.log(myProducts);
循环,因为您需要跟踪索引。
for
答案 3 :(得分:0)
这取决于您是否要专门改变该对象,或者您是否不介意创建新对象
创建新对象
newProducts = myProducts.map((product, index ) => {
product['shipping'] = myArray[index];
return product;
})
改变现有对象
myArray.forEach((item, index) => {
myProducts[index]['shipping'] = item;
});
如果您在函数中执行此操作并且不想在调用此函数之前将产品数组修改为原始位置,则创建新项非常有用,因为对象是通过引用传递的。
答案 4 :(得分:-1)
Use index based for each loop iterator
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];
});