#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. Мы не знаем, действительно ли ОП хочет клонировать объекты, как указано в названии вопроса, который он задает для их изменения . Пожалуйста, дайте понять в своем ответе, что вы используете подход, который рассматривает объекты как неизменяемые.