0

我想知道这有什么问题

$(function() {
var arr1=new Array('A','B','C','D','E','F','G');
var arr2=new Array('F','D','B');
var arr3=arr1;
    for(x=0; x<arr3.length; x++) {
        if(jQuery.inArray(arr3[x],arr2) == -1) {arr3.splice(x, 1);}

    }
    alert(arr1.join(','));
    alert(arr3.join(','));
});

我以为arr1应该还是Array('A','B','C','D','E','F','G'),但是经过这个操作,arr1变成了arr3。这对我来说没有意义,因为整个操作根本没有触及 arr1 。

发布后找到答案。请参阅复制数组 javascript 拼接

4

3 回答 3

0
var x = [3, 4, 5]
var y = [3, 4, 5]
var z = y

x === y // false
y === z // true (y and z reference the same object)

y.push(6)
y // [3, 4, 5, 6]
z // [3, 4, 5, 6]

var x2 = x.slice(0)
x2 === x // false
x2.push('foo')
x2 // [3, 4, 5, 'foo']
x // [3, 4, 5]

用于Array.prototype.slice复制数组

于 2011-10-30T03:49:20.703 回答
0

arr1 is a Array Object. when you copy arr1 like var arr3 = arr1, we just get a new reference to the original object. so , when you change the arr3 , arr1 also change.

您应该搜索“如何克隆对象”,这可能会对您有所帮助。

于 2011-10-30T06:23:21.890 回答
0

赋值var arr3=arr1;是通过引用完成的,即 arr3 变量现在指向 arr1 变量指向的相同位置。带下划线的数据(在本例中为数组)是相同的。本质上 arr1 和 arr3 是相同的。因此,通过一个所做的任何更改都可以通过另一个看到。如果要复制简单类型的数组,请使用slice(0)

var arr3 = arr1.slice(0);
于 2011-10-30T03:39:44.920 回答