我將2個數組傳遞給函數,並且想要將特定條目從一個數組移到另一個數組。 moveDatum函數本身使用underscorejs的方法拒絕和過濾。我的問題是,原始數組沒有改變,就好像我將數組作爲值傳遞,而不是作爲參考。具體條目被正確移動,但正如我所說,效果只是本地的。我必須改變什麼,才能讓原有陣列發生變化?更改數組傳遞給函數
調用該函數:
this.moveDatum(sourceArr, targetArr, id)
功能本身:
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;
}
感謝您的幫助
你不能用'.filter()'或'.reject()'做這個,因爲它們會創建新的數組。你可以通過'trgDS.push(ds [0])'修改'trgDS'來改變'targetArr'的內容(就像你在做的那樣),因爲它們都指向同一個數組,但是你不能使'sourceArr'通過將'srcDS'分配給一個新數組來引用一個新數組。 – nnnnnn
也許你可以發現這個問題,並解釋有用: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Stefan
@nnnnnn謝謝,我想我現在明白了什麼是繼續,基本上,我將srcDS引用到使用reject()創建的新數組中,並且失去了對我實際想要更改的原始傳遞數組的引用,是否有一種簡單的方法可以解決此問題? – macg