首页 > 解决方案 > JavaScript map 函数替换对象

问题描述

我想更改购物车数组中某个对象的数量值。购物车数组中的每个对象都有(id、item_id、数量、名称、价格)。

但是当我的地图函数找到那个特定的购物车时,它不会只改变那个对象的数量,而是用数量值替换整个对象。

请告诉我我做错了什么。

action.payload

{
    id: "a6e1868f-e1bc-4180-abc6-328fdd8e922f",
    quantity: 7
}
state.cart.map(cartItem => cartItem.id === action.payload.id ? cartItem.quantity = action.payload.quantity : cartItem)

在此处输入图像描述

标签: javascriptreactjs

解决方案


state.cart.map(cartItem => cartItem.id === action.payload.id ? cartItem.quantity = action.payload.quantity : cartItem)

当您x从回调的某个索引处返回某个元素时,被映射map的相应元素将替换为 this ,这就是 map 的工作方式。x

你要返回这个:

cartItem.quantity = action.payload.quantity // btw don't mutate state items like this

let x;
console.log(x=9); // logs 9

console.log([1,2].map(y=>y=9)) // logs [9,9]

您需要不可变的方法,因为您正在迭代状态项:

let newVal=99;

let res = [{
    a: 1,
    b: 2
}].map(cartItem => 
    cartItem.a === 1 ? {
        ...cartItem,
        quantity: newVal
    } : cartItem
);

console.log(res)


推荐阅读