2014-06-06 500 views
1

我有代码:.sort函数是否改变原始数组?

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

我需要重新定义ARR或有可能只是某种通话功能? 这样的:

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

将排序和过滤功能,改变原来的数组?

+2

嗯,你试过了吗? –

+0

我试过了,我无法理解它为什么有时无法工作。我的代码存在问题,或者我正在滥用.sort函数。 –

+2

都将工作。因为'sort'改变了数组。但是比较函数将根据(+ n,0,-n)的返回值而不是'boolean'工作。请更换比较器。 – Kamrul

回答

9

使用slice()来排序原始数组的副本

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

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

将变异原数组和 回报:

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

和控制台。 logging arr returns

[{time:3},{time:4},{time:6}]

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

返回

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

但不会影响原始数组。

console.logging改编回报

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

3

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

排序()方法进行排序的阵列的代替元素,并返回 阵列。排序不一定稳定。默认排序顺序 根据字符串Unicode代码点。

+0

[* sort *](http://ecma-international.org/ecma-262/5.1/#sec-15.4.4.11)的一个有趣特征是''未定义的属性值总是排序到结果的末尾,其次是不存在的属性值“',所以它有效地将稀疏数组更改为紧凑但保持原始长度。 – RobG

1

对于圣洁所有的东西,人们的厚爱,这是一个体面的问题,让我们正确地回答它:

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

有你的答案。

相关问题