我有那段代码:
arr = arr.sort(function (a, b) {
return a.time>b.time
})
我是否需要重新定义arr或者可以调用sort函数? 像这样:
arr.sort(function (a, b) {
return a.time>b.time
})
排序和过滤功能会改变原始数组吗?
答案 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