我編寫了下面的代碼,試圖將一個元素添加到新數組的開頭並返回該新數組。它工作正常,但是當我返回arr而不是newArr時,arr也發生了變化。儘管沒有明確修改數組值,但修改了數組值
function addToFrontOfNew(arr, element) {
newArr = arr;
newArr.unshift(element);
return newArr;
}
如果我寫:
function addToFrontOfNew(arr, element) {
newArr = arr;
newArr.unshift(element);
return arr;
}
並測試與addToFrontOfNew函數([1,2],3)該函數將返回[3,1,2]。
如何重寫函數以使原始arr不會與newArr一起被修改?
'return [element] .concat(arr)' –
這是因爲在你的代碼中'newArr'和'arr'指的是同一個數組。你不克隆該陣列。檢查https://stackoverflow.com/questions/3978492/javascript-fastest-way-to-duplicate-an-array-slice-vs-for-loop – undefined