Javascript数组包含元素

时间:2016-06-13 18:18:41

标签: javascript arrays contains

我是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);
     }    
 }

1 个答案:

答案 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);
}