[英]Iterate over an array of object and change object value
我正在尝试遍历一个看起来像这样的对象数组:
const arr = [{
id: 1,
name: "John",
storeName: "Amazon",
price: 100,
isRecieved: false,
deliveryDate: some date
}, ....]
我正在使用从用户那里收到的产品 ID 遍历数组,根据它的 ID 找到相关项目,并将键“isRecieved”从 false 更改为 true。
这是我的代码:
const filterReceivedProduct = (list, id) => {
const changeReceivedState = list.filter((item) => {
return item.id === id ? **item[isRecieved]** = true : item;
})
return changeReceivedState
}
但是当我尝试使用括号表示法访问 object 时,它返回值(在本例中为“false”)并且我无法将值更改为 true..
我做错了什么?
你不需要在这里使用.filter()
。 filter 方法用于从数组中删除元素。 您要做的是将每个元素/对象map转换为新的 object,它具有旧 object 的所有属性,包含更新的isRecieved
属性。 要创建具有旧 object 的所有属性的新 object,您可以将旧object的属性和值扩展到新的 ( {...item}
)。 然后,您可以根据项目 ID 是否与传递到您的 function 中的 ID 匹配来更新isRecived
:
const arr = [{ id: 1, name: "John", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }, { id: 2, name: "Alex", storeName: "Apple", price: 200, isRecieved: false, deliveryDate: 'some date2' }]; const filterReceivedProduct = (list, id) => list.map(item => ({...item, isRecieved: item.id === id // sets isRecieved to true or false based on the equalty comparison })); const res = filterReceivedProduct(arr, 1); console.log(res);
通过在.map()
回调中创建一个新的 object ,您永远不会改变arr
中的原始对象,将所有内容视为不可变的。
这里的filter
没有意义。 过滤器用于根据条件filter
一些数组。 如果您只想更改数组内部 object 的某些属性,请为此目的使用map
。
请参见下面的示例。
const arr = [{ id: 1, name: "John", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }, { id: 2, name: "Doe", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }]; filterReceivedProduct = (list, id) => { return list.map(item => { if(item.id === id) { item.isRecieved = true; } return item; }); } console.log(filterReceivedProduct(arr, 1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.