Splice临时数组将修改主数组

时间:2015-01-28 18:59:53

标签: javascript jquery arrays

当我在temp上使用splice时,是否正常修改了mainArray?

console.log(mainArray);

var temp = mainArray;

temp.airfares.splice(index, 1);

4 个答案:

答案 0 :(得分:5)

这是因为temp不是一个全新的数组,只是对mainArray的引用。你需要复制一份。

要轻松制作数组副本,使用Array.prototype.slice()很常见。请注意,它不会复制每个元素,但会复制数组本身(因此您可以稍后推送或删除元素)。

例如:



var data = [1, 2, 3, 4, 5];
document.getElementById("original").textContent = JSON.stringify(data);

var ref = data;
var copy = data.slice();

// Add some values to data, ref will change but copy won't
data.push(6, 7, 8);

document.getElementById("ref").textContent = JSON.stringify(ref);
document.getElementById("copy").textContent = JSON.stringify(copy);

<pre id="original"></pre>
<pre id="ref"></pre>
<pre id="copy"></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

var temp = mainArray;会将temp设置为mainArray的引用。这意味着,它们都引用相同的数组。因此,如果您修改temp,则还要修改mainArray

答案 2 :(得分:1)

是的,JavaScript数组是对象,因此tempmainArray都是对同一底层对象的引用。

你想要的是:

console.log(mainArray);
var temp = mainArray.slice();
temp.airfares.splice(index, 1);

答案 3 :(得分:1)

数组存储为参考,而不存储实际数组。存储它的引用(因为数组也是对象)

在这里,您可以使用slice()concat()方法的黑客来分配它而无需参考

 var temp = mainArray.slice();

 var temp = [].concat(mainArray);