【发布时间】:2021-06-07 17:52:24
【问题描述】:
请帮助我找到解决方案,并在我的代码重构方面有所帮助。
我只想将一些对象从一个数组放入一个新数组中,它就像一个产品购物车。这就是为什么我不想看到任何重复项,而只想看到:产品 - 模式窗口中的数量。 我有两个数组:
state = {
existData: [
{
productName: "CoolProductName 1",
count: 0,
image: "src.jpeg",
author: "Name Surname",
date: "21.02.2020",
id: 1,
},
{
productName: `CoolProductName 2"`,
count: 0,
image: "src.png",
author: "Name Surname",
date: "21.02.2020",
id: 2,
},
],
addedToCart: [],
};
所以,函数是:
added = (id) => {
//get product Id from other component
this.setState(({ addedToCart, existData }) => {
let newObj = existData.filter((el) => el.id === id); // there is I get product selected by user from array of all products
return {
addedToCart: [...addedToCart, ...newObj],
};
});
};
根据我的小知识,我想这样做:
let newObj = existData
.filter((el) => el.id === id)
.map((el) => {
if (el.count >= 0) {
el.count++;
}
return { ...el };
});
是的,它使用count++ 返回值,但在addedToCart 数组中,我有不同计数的重复对象。
我看到了两种方式:
- 将对象添加到购物车并增加计数后,删除
addedToCart数组中的重复项,然后在购物车中显示类似{addedToCart.prductName} - {addedToCart.count}的内容。 - 计算重复对象并删除计数字段。
什么是更好的方法和合适的代码?谢谢
【问题讨论】:
-
有适合我的解决方案:` added = (id) => { this.setState (( { addedToCart, dataList } )=>{ // filter return an Array but // find return an元素,我们正在寻找的 id const newItem = dataList.find(el=>el.id===id); const mainArr = [... addedToCart ]; // 如果购物车中没有 if(mainArr .find(el=>el.id===id) == undefined){ newItem.count = 1; mainArr.push(newItem); } // 如果存在则计数 ++ else{ mainArr.find(el=> el.id===id).count++; } return{ addedToCart: mainArr } })}; `
标签: javascript arrays reactjs sorting