javascript - 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)
解决方案
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)
推荐阅读
- javascript - 禁用浏览器后退按钮时启用前进按钮
- powershell - 每行的powershell export-csv总和列
- swift - 最初只为 iPad 设置后,无法获取图标资产注册以显示 iPhone
- python - 在python中读取配置文件
- mongodb - 使用匹配、查找、展开后需要在输出中形成 $group 字段
- printing - 在 libreoffice 文档的页脚中插入的打印页数
- javascript - 完整的日历事件删除不起作用
- cassandra - Cassandra - 压缩过程卡住
- python - 用户项目评分矩阵:IndexError
- angularjs - Angularjs:只允许未经授权的访问一页