2016-06-13 6 views
1

Ich bin neu in Javascript und ich habe eine Frage. Ich habe ein Array von Element, ich möchte testen, ob das Array ein bestimmtes Element enthält, dann aktualisieren Sie es, wenn Sie kein neues Element hinzufügen.Javascript Array containts Element

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

Was ist die Frage? –

Antwort

2

Ich nehme an, die Frage fragt, warum das Element wiederholt hinzugefügt wird.

Der Grund ist, dass Sie es auf bei jeder Iteration der Schleife hinzufügen, wenn der Eintrag dieser Iteration nicht übereinstimmt.

Stattdessen müssen Sie bestimmen, ob der Eintrag im Array mit der Schleife ist, dann fügen Sie es nur wenn nicht danach, wenn Sie Schleifen durchgeführt.

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

Technisch Sie brauchen nicht die found Variable, könnten Sie i verwenden:

// 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); 
} 

Beachten Sie, dass ES2015Array#find gegeben, die dies nützlich und unterfüttert werden kann/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

vielen dank ich werde es versuchen –