[英]Strange array.push in JS
我有简单的代码
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
方法将值推入两个数组
我哪里错了?
数组不会在JavaScript中自动克隆。 当你说像
arr1 = arr2;
如果两个arr2
都是有效数组,则您尚未制作arr2
的实际副本。 您要做的就是为arr1
创建指向它的引用指针。 所以当你做出改变
arr1[0] = "some value";
您(实质上)是在说与
arr2[0] = "some value";
要正确克隆单独的副本,您需要使用以下命令:
var items_to_send = sites_from_session.slice();
这将返回一个新数组,其中包含原始数组中的所有项目。
这是一个非常常见的Javascript问题。 不会像这样复制数组:
var items_to_send = sites_from_session;
它仅将数组的引用复制到新变量。 换句话说, items_to_send
和sites_from_session
是指向RAM中同一阵列的两个名称。 如果要复制数组(称为深度复制)而不是仅另一个指针(浅复制),则需要使用slice()
:
//create a copy of the array
var items_to_send = sites_from_session.slice(0);
您的其余代码应该可以正常工作。
这个问题的可能重复: 如何在Javascript中克隆对象数组?
您可以在此处了解更多信息: http : //davidwalsh.name/javascript-clone-array
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.