javascript splice - 奇怪的问题

发布于 2024-12-13 00:58:37 字数 572 浏览 1 评论 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 拼接

I wonder what's wrong with this

$(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(','));
});

I thought arr1 should still be Array('A','B','C','D','E','F','G'), but after this operation, arr1 becomes arr3. It doesn't make sense to me since the entire operation doesn't touch arr1 at all.

Found the answer after posting this. See duplicating arrays javascript splicing

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寂寞清仓 2024-12-20 00:58:37

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

var arr3 = arr1.slice(0);

Assignment like var arr3=arr1; are done by reference i.e. arr3 variable now points to same location where arr1 variable points to. The underlined data (in this case array) is the same. Essentially arr1 and arr3 are same. So any change done via one is visible via other. If you want to duplicate the array of simple types use slice(0)

var arr3 = arr1.slice(0);
以酷 2024-12-20 00:58:37
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 复制数组。

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]

Use Array.prototype.slice to copy an array.

若有似无的小暗淡 2024-12-20 00:58:37

arr1 是一个数组对象。当您像 var arr3 = arr1 一样复制 arr1 时,我们只是获得对原始对象的新引用。
因此,当您更改 arr3 时,arr1 也会更改。

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

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.

you should search "how to clone a object", this may help you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文