0

我有简单的代码

sites_from_session = 12;
function function_name () {
    var items_to_send = sites_from_session;
    var template_name = jQuery('#new-site-template-name').val();
    console.log(sites_from_session);
    items_to_send.push(template_name);
    console.log(sites_from_session);
}


function_name();
function_name();
function_name();
function_name();
function_name();
function_name();//...

问题是该push方法将值推送到两个数组

在此处输入图像描述

我哪里错了?

4

2 回答 2

1

数组不会在 JavaScript 中自我克隆。当你说类似

arr1 = arr2;

如果两者arr2都是有效数组,则您尚未制作arr2. 您所做的只是为它创建一个引用指针arr1。所以当你做出改变时

arr1[0] = "some value";

你(本质上)在说同样的话

arr2[0] = "some value";

要正确克隆一个单独的副本,您需要使用它:

var items_to_send = sites_from_session.slice();

这将返回一个新数组,其中包含原始数组中的所有项目。

于 2012-11-26T12:56:05.003 回答
0

这是一个非常常见的 Javascript 问题。数组不会像这样复制:

var items_to_send = sites_from_session;

它只是将数组的引用复制到一个新变量。换句话说,items_to_sendsites_from_session是指向 RAM 中同一个数组的两个名称。如果要制作数组的副本(称为深复制)而不仅仅是另一个指针(浅复制),则需要使用slice()

//create a copy of the array
var items_to_send = sites_from_session.slice(0);

您的其余代码应该可以正常工作。

这个问题可能重复:How do you clone an Array of Objects in Javascript?

您可以在这里了解更多信息:http: //davidwalsh.name/javascript-clone-array

于 2012-11-26T12:59:09.243 回答