簡體   English   中英

在javascript中,如何對數組的子集進行排序?

[英]in javascript, how do you sort a subset of an array?

我有一個數組,並希望排序除最后n個元素之外的所有元素。

例如,如果數組長度為10個元素,則需要對元素0到7進行排序,而將元素8-9保留在原位。

var array = [5, 2, 6, 4, 1, 9, 3, 8, 7];
array = array.slice(0, 7).sort().concat(array.slice(7, 10));
// array is now [1, 2, 3, 4, 5, 6, 9, 8, 7]

如果需要對數組進行排序(即不創建新的排序數組),這就是sort()方法的作用,您可以執行以下操作:

var array = [5, 2, 6, 4, 0, 1, 9, 3, 8, 7];
var unsorted = array.slice(7);
array.length = 7;
array.sort().push.apply(array, unsorted);

更一般地說,這是一個對數組的一部分進行排序的函數。 sort()方法一樣,它也返回對數組的引用。

function partialSort(arr, start, end) {
    var preSorted = arr.slice(0, start), postSorted = arr.slice(end);
    var sorted = arr.slice(start, end).sort();
    arr.length = 0;
    arr.push.apply(arr, preSorted.concat(sorted).concat(postSorted));
    return arr;
}

例:

var array = [5, 2, 6, 4, 0, 1, 9, 3, 8, 7];
partialSort(array, 0, 7);

關於@darin提供的解決方案的ES6即興重復段

let subSort = (arr, i, n, sortFx) => [].concat(...arr.slice(0, i), ...arr.slice(i, i + n).sort(sortFx), ...arr.slice(i + n, arr.length));
  • 是該小節開始的索引
  • n是要排序的元素數
  • sortFx是排序功能

因此可以對數組中的范圍進行排序:

var array = [5, 2, 6, 4, 1, 9, 3, 8, 7];
// sort array beginning at index 2; sort 4 elements of array
subSort(array, 2, 4, (a, b) => a - b);
// array is now [5, 2, 1, 4, 6, 9, 3, 8, 7]
subSort(array, 2, 4, (a, b) => b - a);
// array is now [5, 2, 9, 6, 4, 1, 3, 8, 7]

subSort()可用於任意復雜度的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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