我正在尝试将Objects作为元素添加到数组中。我可以限制已添加的第一个元素,但后续条目将被重复。
这里是代码:
onAddButtonPress(data, id, name){
const items = this.props.items;
if(items.length >= 1){
items.forEach(i=>
{
if(i.id !== id){
const arr = data.map(i=>{
return i.name
})
this.props.addToShopList({id:id, arr:arr, name:name})
}
}
)
}
else{
const arr = data.map(i=>{
return i.name
})
this.props.addToShopList({id:id, arr:arr, name:name})
}
}
如何停止重复的条目? 请提出建议。谢谢!
答案 0 :(得分:3)
您是从循环内部添加到列表的,这似乎不太正确。还有许多不必要的检查和重复的代码。
使用Array.prototype.some()
,就足够了:
onAddButtonPress(data, id, name) {
const items = this.props.items;
if (!items.some(i => i.id === id)) {
const arr = data.map(({name}) => name);
this.props.addToShopList({id, arr, name});
}
}
完整的类示例:
class Test {
constructor() {
this.props = {
items: [],
addToShopList: (item) => this.props.items.push(item)
};
}
onAddButtonPress(data, id, name) {
const items = this.props.items;
if (!items.some(i => i.id === id)) {
const arr = data.map(({name}) => name);
this.props.addToShopList({id, arr, name});
}
}
}
const test = new Test();
test.onAddButtonPress([], 1, "One");
test.onAddButtonPress([], 2, "Two");
test.onAddButtonPress([], 2, "Two");
console.log(test.props.items);