数组排序创建链接数组?

时间:2013-04-12 21:16:25

标签: javascript arrays

我正在创建Chrome扩展程序,并且正在使用已排序的数组获得一些奇怪的结果。我有两个名为“timearray”和“timearrayorig”的全局数组(timearray是timearrayorig的排序版本)。在函数中,我在timearrayorig中设置了一堆值,然后将整个数组复制到timearray并对timearray进行排序。出于某种原因,这也对timearrayorig进行了排序。如果有人能解释为什么会这样,我将不胜感激。

for (var i = 0; i < triparray.length; i++) {
    for (var j = 0; j < trainsfeed.length; j++) {
        if (trainsfeed[j].getElementsByTagName('Trip')[0].childNodes[0].nodeValue == triparray[i]) {
            if (timearrayorig.length < i + 1 || timearrayorig[i] > Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue)) {
                timearrayorig.push(Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue));
            }
        }
    }
}
timearray = timearrayorig;
//timearray.sort();

(trainfeed是由消息分隔的一堆XML,triparray是“Trip”字段的所有不同值的列表.timearrayorig和timearray是来自trainfeed元素的triparray的每个元素的最早时间。)< / p>

如果我运行此脚本并在调试控制台中找到timearrayorig和timearray的值,它们是相同的,例如[1365801720,136551180,136551600,1365802800,1365800940]。但是当我按时间排序时,它们都会变成[1365800940,136551180,1365801600,1365801720,1365802800]。

2 个答案:

答案 0 :(得分:1)

timearray = timearrayorig;

这不是复制数组;它创建了第二个变量,它引用了相同的数组。仍然只有一个数组,这就是为什么排序它会影响两个变量。要copy the array,请执行:

var timearray = timearrayorig.slice();

有关详细信息,请参阅:Copying array by value in JavaScript

答案 1 :(得分:0)

timearrayorig持有对数组的引用,因此当您指定timearray = timearrayorig;时,两个标签都引用相同的内存空间。

如果要复制数组,可以执行以下操作:

timearray = [];
for(var i = 0; i < timearrayorig.length; i++) timerray[i] = timearrayorig[i];
相关问题