首页 > 解决方案 > 我无法使用在同一对象内创建的方法修改对象的属性。我正在尝试使用 foreach 然后 console.log 未定义

问题描述

代码:

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

我在方法之外尝试了代码,它可以工作,但是当我把它放在一个函数中时,它就不再工作了。

标签: javascriptarraysobjectmethodsforeach

解决方案


这是因为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


推荐阅读