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 ES2015
Array#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);
}
Was ist die Frage? –