【问题标题】:Javascript array containts element [closed]Javascript数组包含元素[关闭]
【发布时间】:2016-06-13 18:18:41
【问题描述】:
我是 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);
}
}
【问题讨论】:
标签:
javascript
arrays
contains
【解决方案1】:
我认为问题是询问为什么重复添加该项目。
原因是,如果迭代的条目不匹配,您将在循环的每次迭代中添加它。
相反,您需要使用循环确定该条目是否在数组中,然后在完成循环时仅添加它之后。
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);
}