2016-06-13 48 views
1

我是javascript新手,我有一個問題。 我有一個數組元素,我想測試數組是否包含指定元素,然後更新它,如果不添加新元素。Javascript數組containts元素

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

​​

注意ES2015添加Array#find,這對於這是有用的,可以墊高/ polyfilled :

var found = datasourcedatas.find(function(entry) { 
    return item.id == entry.id; 
}); 
if (found) { 
    found.produitqan = qan; 
    item.produitqan = qan; 
} else { 
    cartDataSource.add(item); 
} 
+0

非常感謝,我會嘗試 –