我有那个代码:
arr = arr.sort(function (a, b) {
return a.time>b.time
})
我需要重新定义 arr 还是可以只调用 sort 函数?像这样:
arr.sort(function (a, b) {
return a.time>b.time
})
sort 和 filter 函数会改变原始数组吗?
原文由 Prosto Trader 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有那个代码:
arr = arr.sort(function (a, b) {
return a.time>b.time
})
我需要重新定义 arr 还是可以只调用 sort 函数?像这样:
arr.sort(function (a, b) {
return a.time>b.time
})
sort 和 filter 函数会改变原始数组吗?
原文由 Prosto Trader 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个体面的问题,让我们正确地回答它:
const a = [1, 2, 3];
const b = a.sort();
console.log(a === b); // true
有你的答案。对象的 ===
运算符将比较内存位置,因此它是内存中的同一个对象。
这是一种耻辱,因为如果 sort 创建一个新数组(不变性等)会更好,但在许多语言中它不会返回一个新数组,而是返回相同的数组(重新排序)。
所以如果你想让它不可变,你可以这样做:
const a = [1, 2, 3];
const b = a.slice(0).sort();
原文由 Alexander Mills 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答10.3k 阅读
4 回答8.6k 阅读✓ 已解决
7 回答10.7k 阅读
2 回答11.3k 阅读✓ 已解决
6 回答2.5k 阅读
5 回答4.2k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
使用
slice()
对原始数组的 副本 进行排序。将改变原始数组并返回:
console.log(arr) 返回
但
回报
但不会影响原来的数组。
console.log(arr) 返回