我有一个对象,其中包含一个id作为键,并包含数量作为值,例如;
let order = {1002: 2, 1010: 1}
我想将订单对象与一系列产品进行比较,例如:
let stock = [{name: "test", id: "1002", quantity: 100}, {name: "moreTest", id: "1010", quantity: 100}]
我要根据股票对象中的相应值来减少股票数组中每个对象的数量,例如:
let newStock = [{name: "test", id: "1002", quantity: 98}, {name: "moreTest", id: "1010", quantity: 99}]
答案 0 :(得分:0)
这里是一种单线方法:
let newStock = stock.map(item => ({...item, quantity: item.quantity - (order[parseInt(item.id,10)] || 0)}))
顺便说一句:
答案 1 :(得分:0)
这是一个可能的解决方案,非常清楚:
let order = {1002: 2, 1010: 1}
let stock = [{name: "test", id: "1002", quantity: 100}, {name: "moreTest", id: "1010", quantity: 100}]
stock.forEach(element => {
Object.keys(order).forEach(function(key) {
const quantityBought = order[key];
// == and not === because element.id is a string and key is a number
if (element.id == key) {
element.quantity -= quantityBought;
}
});
});
console.log(stock);
答案 2 :(得分:0)
您可以在这里使用Array.prototype.reduce这样的东西
let stock = [{name: "test", id: "1002", quantity: 100}, {name: "moreTest", id: "1010", quantity: 100}]
let order = {1002: 2, 1010: 1}
let result=stock.reduce((acc,value)=>{
value.quantity=value.quantity-order[value.id];
acc.push(value);
return acc;
},[])
console.log(result)
作为参考,请查看mozilla docs中的数组归约函数