1

我有一个我无法解决的问题,所以任何帮助将不胜感激。

  • 在我的 scipt 的顶部,我声明了一个全局值(' _raw')
  • (使用 jQuery)我做了一个 Ajax 调用,它返回 JSON 数组数据(我已经检查过,JSON 数据是正确的)
  • 我接受这个 JSON 响应并将其分配给_raw
  • 当我点击一个链接时,_raw被传递给一个函数,例如function myFunction(dataArray),调用myFunction(_raw)
  • 在这个函数中,根据一些标准,dataArray被拼接(即dataArray.splice(2,1)
  • dataArray然后返回。

例如

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自身。为什么会这样?

4

3 回答 3

2

数组是通过引用传递的,所以不会var data = dataArray复制数组。 因此,修改原始数组。
data.splice(2,1)

用于.slice(2,1)复制数组。
或者,由于您似乎想要获取第二个元素的值,请使用数字索引:

function myFunction(dataArray){
    return dataArray[2];
}
于 2012-04-04T11:01:35.993 回答
2

splice()更改原始数组:请参阅http://www.devcurry.com/2010/12/slice-and-splice-in-javascript.html

与 slice() 不同,splice() 方法修改原始数组并返回一个新数组。

作为旁注,您实际上并不需要_raw作为参数传递,myFunction()因为它是一个全局变量,因此在任何地方都可见

于 2012-04-04T11:02:39.873 回答
2

在 JavaScript 中,数组总是通过引用传递,所以当你将它分配给数据变量时,你只是创建了一个指向 _raw 的指针,所有的操作都将在 _raw 上完成。

您需要克隆阵列。根据其中的内容以及它是否是多维的,您可能需要使用一种方法来按照此处进行深层复制。

于 2012-04-04T11:05:21.040 回答