Сравните массив объектов с объектом и уменьшите количество - PullRequest
2 голосов
/ 08 апреля 2019

У меня есть объект, содержащий идентификатор в качестве ключа и количество в качестве значения, например;

let order = {1002: 2, 1010: 1}

Я хочу сравнить объект заказа с массивом товаров, например ::10000

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}]

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вот возможное решение, очень ясное:

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);
0 голосов
/ 08 апреля 2019

Вы можете использовать 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

0 голосов
/ 08 апреля 2019

Вот однострочный подход:

let newStock = stock.map(item => ({...item, quantity: item.quantity - (order[parseInt(item.id,10)] || 0)}))

КСТАТИ:

  1. Я думаю, что ID акции должен быть числом (или заказ должен иметь строковый ключ - я использовал parseInt, но я не думаю, что это лучший метод).
  2. акции должны быть карты, чтобы предотвратить несколько акций с одинаковым идентификатором.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...