如何在排序之前保存数组的副本?

Squ*_*rrl 2 javascript arrays sorting

在我对它进行排序之前,我正在尝试保存数组的副本:

words_Array = ["Why", "doesnt", "this", "work?"];

var sortedWords_Array = words_Array;

sortedWords_Array.sort(function(a, b){
    return b.length - a.length;
});

alert("sortedWords_Array is :"+sortedWords_Array);
alert("words_Array is :"+words_Array);
Run Code Online (Sandbox Code Playgroud)

在对sortedWords_Array进行排序之后,它们都因某种原因而被排序. http://jsfiddle.net/zv39J/ 为什么?

Vil*_*zed 13

因为在javascript中,数组是通过引用传递的,这意味着当你使一个数组等于另一个时,只要你对一个数组进行编辑,它就会改变.要在您的示例中修复此问题,请更改以下行:

var sortedWords_Array = words_Array;
Run Code Online (Sandbox Code Playgroud)

至:

 //make a copy of array by using slice
 var sortedWords_Array = words_Array.slice(0);
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解其他用途和更深入的解释:

slice不会更改原始数组,但会返回一个新的"一级深度"副本,其中包含从原始数组中切出的元素的副本.

Array.prototype.slice()