【问题标题】: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);
}

【讨论】:

  • 非常感谢我会试试的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2013-11-15
  • 2022-01-02
  • 2014-05-02
相关资源
最近更新 更多