我是javascript的新手,我有一个问题。 我有一个元素数组,我想测试数组是否包含指定元素,如果不添加新元素则更新它。
for (var i = 0; i < datasourcedatas.length; i++) {
alert(item.id+" itemid "+ datasourcedatas[i].id);
if(item.id==datasourcedatas[i].id){
alert(item.id+" itemid "+ datasourcedatas[i].id+" boucle");
datasourcedatas[i].produitqan=qan;
item.produitqan=qan;
break;
}
else {
cartDataSource.add(item);
}
}
答案 0 :(得分:2)
我认为问题是询问为什么要重复添加项目。
原因是如果该迭代的条目不匹配,您将在循环的每次迭代中添加它。
相反,您需要使用循环确定条目是否在数组中,然后在完成循环时仅在之后添加它。
var found = false;
for (var i = 0; i < datasourcedatas.length; i++) {
if (item.id == datasourcedatas[i].id) {
found = true;
datasourcedatas[i].produitqan = qan;
item.produitqan = qan;
break;
}
}
if (!found) {
cartDataSource.add(item);
}
从技术上讲,您不需要found
变量,可以使用i
:
// I don't like or suggest this, just pointing it out
for (var i = 0; i < datasourcedatas.length; i++) {
if (item.id == datasourcedatas[i].id) {
datasourcedatas[i].produitqan = qan;
item.produitqan = qan;
break;
}
}
if (i >= datasourcedatas.length) {
cartDataSource.add(item);
}
请注意,ES2015
添加了Array#find
,这对此非常有用,可以进行填充/填充:
var found = datasourcedatas.find(function(entry) {
return item.id == entry.id;
});
if (found) {
found.produitqan = qan;
item.produitqan = qan;
} else {
cartDataSource.add(item);
}