簡體   English   中英

.sort 函數會改變原始數組嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM