[英]Does .sort function change original array?
我有那個代碼:
arr = arr.sort(function (a, b) {
return a.time>b.time
})
我需要重新定義 arr 還是可以只調用 sort 函數? 像這樣:
arr.sort(function (a, b) {
return a.time>b.time
})
排序和過濾函數會改變原始數組嗎?
使用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}]
這是一個不錯的問題,讓我們正確回答:
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();
它對數組進行就地排序(修改數組)。 來自MDN :
sort() 方法對數組的元素進行就地排序並返回該數組。 排序不一定是穩定的。 默認排序順序是根據字符串 Unicode 代碼點。
是的,它修改了原始數組。
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
或者來自 ES6:
const a = [1, 2, 3];
const b = [...a].sort();
排序和過濾函數會改變原始數組嗎
對於sort()方法,答案是Yes
但對於filter()方法,答案是No
。
讓我用一個例子來解釋:
// Original Array const arr = [5, 4, 3, 2, 1]; // Sorting array values and assigned in a variable. const sortedArr = arr.sort((a, b) => ab); // Original array modified. console.log(arr); // [1,2,3,4,5] // New variable with sorted array. console.log(sortedArr); // [1,2,3,4,5]
為了防止原始數組被修改,我們可以使用to[Operation]
來返回一個應用了操作的新集合(目前處於第 3 階段,即將推出)。
const arr = [5, 4, 3, 2, 1];
const sortedArr = arr.toSort((a, b) => a-b);
console.log(arr); // [5, 4, 3, 2, 1]
console.log(sortedArr); // [1, 2, 3, 4, 5]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.