Je transmets 2 tableaux à une fonction et je souhaite déplacer une entrée spécifique d'un tableau vers un autre. La fonction moveDatum elle-même utilise les méthodes underscorejs reject et filter. Mon problème est, les tableaux d'origine ne sont pas modifiés, comme si je passais les tableaux comme valeur et non comme référence. L'entrée spécifique est correctement déplacée, mais comme je l'ai dit, l'effet est seulement local. Que dois-je changer pour que les tableaux originaux changent également?changement de tableau transmis à la fonction
Appelez la fonction:
this.moveDatum(sourceArr, targetArr, id)
Fonction lui-même:
function moveDatum(srcDS, trgDS, id) {
var ds = _(srcDS).filter(function(el) {
return el.uid === uid;
});
srcDS = _(srcDS).reject(function(el) {
return el.uid === uid;
});
trgDS.push(ds[0]);
return this;
}
Merci pour l'aide
Vous ne pouvez pas faire cela avec '.filter()' ou '.reject()' car ils créent de nouveaux tableaux. Vous pouvez changer le contenu de 'targetArr' en modifiant' trgDS' avec 'trgDS.push (ds [0])' (comme vous le faites), car les deux font référence au même tableau, mais vous ne pouvez pas provoquer 'sourceArr' pour faire référence à un nouveau tableau en affectant 'srcDS' à un nouveau tableau. – nnnnnn
Peut-être que vous pouvez trouver cette question et les explications utiles: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Stefan
@nnnnnn Merci, je pense que je comprends maintenant ce qui est en cours, je référence fondamentalement srcDS au nouveau tableau créé avec reject() et perd la référence au tableau originellement passé que je veux vraiment changer, y aurait-il un moyen facile de résoudre ce problème? – macg