.sort函数是否会更改原始数组?

时间:2014-06-06 05:43:53

标签: javascript arrays sorting

我有那段代码:

arr = arr.sort(function (a, b) {
    return a.time>b.time
})

我是否需要重新定义arr或者可以调用sort函数? 像这样:

arr.sort(function (a, b) {
    return a.time>b.time
})

排序和过滤功能会改变原始数组吗?

4 个答案:

答案 0 :(得分:19)

使用slice()对原始数组的副本进行排序。

var arr =[{time:4},{time:3},{time:6}];

arr.sort(function (a, b) {
  return a.time-b.time;
});

将改变原始数组和 返回:

  

[{时间:3},{时间:4},{时间:6}]

和console.log(arr)返回

  

[{时间:3},{时间:4},{时间:6}]

但是

var arr =[{time:4},{time:3},{time:6}];
arr.slice().sort(function (a, b) {
  return a.time-b.time;
});

返回

  

[{时间:3},{时间:4},{时间:6}]

但不会影响原始数组。

console.log(arr)返回

  

[{时间:4},{时间:3},{时间:6}]

答案 1 :(得分:6)

它对数组进行排序(修改数组)。来自MDN

  

sort()方法对数组中的元素进行排序并返回   数组。排序不一定稳定。默认排序顺序   是根据字符串Unicode代码点。

答案 2 :(得分:5)

这是一个不错的问题,让我们正确回答:

const a = [1,2,3];
const b = a.sort();
console.log(a === b); // true

有你的答案。对象的===运算符将比较内存位置,因此它与内存中的对象相同。这是一种耻辱,因为如果sort创建一个新数组会更好,但在许多语言中它不会返回一个新数组,而是返回相同的数组(重新排序)。

答案 3 :(得分:0)

是的,它修改了原始数组。

const a = [1, 2, 3];
const b = a.sort();
const c = [...a].sort(); //es6 feauture similar to slice(0)
console.log(a === b); // true
console.log(a === c);//false