Pro*_*der 9 javascript arrays sorting
我有那个代码:
arr = arr.sort(function (a, b) {
return a.time>b.time
})
Run Code Online (Sandbox Code Playgroud)
我需要重新定义arr还是可以调用sort函数?像这样:
arr.sort(function (a, b) {
return a.time>b.time
})
Run Code Online (Sandbox Code Playgroud)
排序和过滤功能会改变原始数组吗?
Lex*_*obs 25
用于slice()对原始数组的副本进行排序.
var arr =[{time:4},{time:3},{time:6}];
arr.sort(function (a, b) {
return a.time-b.time;
});
Run Code Online (Sandbox Code Playgroud)
将改变原始数组并返回:
[{时间: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;
});
Run Code Online (Sandbox Code Playgroud)
回报
[{时间:3},{时间:4},{时间:6}]
但不会影响原始数组.
console.log(arr)返回
[{时间:4},{时间:3},{时间:6}]
这是一个体面的问题,让我们正确回答:
const a = [1,2,3];
const b = a.sort();
console.log(a === b); // true
Run Code Online (Sandbox Code Playgroud)
有你的答案。对象的===运算符将比较内存位置,因此它是内存中的同一对象。遗憾的是,如果sort创建一个新数组(不变性等)会更好,但是在许多语言中,它不会返回新数组,而是返回同一数组(重新排序)。
因此,如果您希望它是不可变的,则可以执行以下操作:
const a = [1,2,3];
const b = a.slice(0).sort();
Run Code Online (Sandbox Code Playgroud)
是的,它修改了原始数组。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10295 次 |
| 最近记录: |