我有一个问题我无法深究,所以任何帮助都会非常感激。
_raw
')_raw
_raw
会传递给某个功能,例如function myFunction(dataArray)
,myFunction(_raw)
dataArray
被拼接(即dataArray.splice(2,1)
)dataArray
。e.g。
var _raw;
// AJAX call sets RAW to an array e.g. Apple, Banana, Pear, Pineapple, Coconut, Raspberry
myFunction(dataArray){
var data=dataArray;
data.splice(2, 1);
return data[0];
}
$('a').click(function(){
result = myFunction(_raw);
alert(result);
// First time this is run, returns 'Pear', however, second time, returns 'Coconut'- as if the splice is being performed on _raw as well as myArray/data...
});
我遇到的问题是,据我所知,唯一的时间_raw
是在AJAX调用期间,但是,当调用函数myFunction时,传递_raw
,拼接似乎也会影响_raw
本身。为什么会这样?
答案 0 :(得分:2)
数组通过引用传递,因此var data = dataArray
执行不复制数组。
因此,data.splice(2,1)
修改原始数组。
使用.slice(2,1)
复制阵列。
或者,因为您似乎想要获取第二个元素的值,请使用数字索引:
function myFunction(dataArray){
return dataArray[2];
}
答案 1 :(得分:2)
splice()
更改原始数组:请参阅http://www.devcurry.com/2010/12/slice-and-splice-in-javascript.html
与slice()不同,splice()方法修改原始数组并返回一个新数组。
作为旁注,你并不需要将_raw
作为myFunction()
的参数传递,因为它是一个全局变量,因此随处可见
答案 2 :(得分:2)
在JavaScript中,数组总是通过引用传递,因此当您将其分配给数据变量时,您只需创建一个指向_raw的指针,所有操作都将在_raw上完成。
您需要复制数组。根据其中的内容以及它是否是多维的,您可能需要使用根据here执行深层复制的方法。