Я не могу изменить свойство объекта с помощью метода, созданного внутри того же объекта. Я пытаюсь использовать foreach, а затем консоль.журнал не определен

#javascript #arrays #object #methods #foreach

Вопрос:

код:

     let references = [
        { nombre: 'productA', priceUsd: 2200, qty: 15 },
        { nombre: "productB", priceUsd: 1500, qty: 20 },
        { nombre: "productC", priceUsd: 3000, qty: 7 }
      ];
    const store = {
    products: references,
    increasePrice: function(percToAdd) {
    return this.products.forEach(item =>item['priceUsd']=item.priceUsd*(1 percToAdd/100));}
    }
    const increased = store.increasePrice(30);
    console.log(increased)
 

выход:

 undefined
 

Но я ищу что-то вроде этого:

 [
{ nombre: 'productA', priceUsd: 2860, qty: 15 },
{ nombre: "productB", priceUsd: 1950, qty: 20 },
{ nombre: "productC", pricesUsd: 3900, qty: 7 }
]
 

Я попробовал код вне метода, и он работает, но когда я помещаю его в функцию, он больше не работает.

Комментарии:

1. forEach ВОЗВРАТ undefined . Сделайте запись store еще раз.

Ответ №1:

Это связано forEach с тем, что не возвращает значение(изменяет массив), а вместо этого выполняет определенную операцию над каждым элементом массива.

Вы можете использовать map для этого случая .

 
let references = [
    { nombre: 'productA', priceUsd: 2200, qty: 15 },
    { nombre: "productB", priceUsd: 1500, qty: 20 },
    { nombre: "productC", priceUsd: 3000, qty: 7 }
];
const store = {
    products: references,
    increasePrice: function (percToAdd) {
        return this.products.map(item => ({ ...item, ["priceUsd"]: item.priceUsd * (1   percToAdd / 100) }));
    }
}
const increased = store.increasePrice(30);
console.log(increased)
 

Также вы неправильно priceUsd написали в последнем пункте references .

Комментарии:

1. Мы не знаем, действительно ли ОП хочет клонировать объекты, как указано в названии вопроса, который он задает для их изменения . Пожалуйста, дайте понять в своем ответе, что вы используете подход, который рассматривает объекты как неизменяемые.