我想對由字母 F、S、T 組成的字符陣列進行排序。每個字符可能有重復項。
示例輸入陣列:
['F', 'F', 'S', 'T', 'T']
['F', 'S']
['T', 'S', 'S', 'F']
在我的專案的背景關系中,T = 0, F = 1, S = 2,所以在對陣列進行排序時,如果T在陣列中,它應該是第一個索引。F 應該是第二個索引,S 應該是第三個索引。有沒有辦法讓我做到這一點?
uj5u.com熱心網友回復:
定義一種評分方式,然后在自定義Array.prototype.sort函式中使用它。
Array.prototype.slice(0)使用,因為.sort改變了原始陣列。
const score = {
"T": 0,
"F": 1,
"S": 2,
}
const tests = [
['F', 'F', 'S', 'T', 'T'],
['F', 'S'],
['T', 'S', 'S', 'F']
];
for (const test of tests) {
const sorted = test.slice(0).sort((a, b) => score[a] - score[b]);
console.log(sorted);
}
uj5u.com熱心網友回復:
按照您想要的順序創建一個簡單的字母陣列。...使用rest 運算子接受無限數量的引數:
const key = ['T', 'F', 'S'];
const sortByKeyIndex = (ki, ...arr) => {// ([key], ...[A], [B], [C])
合并來自...rest 運算子的陣列——這會生成一個陣列陣列,然后運行.map()
[...arr].map(a => //...[[A], [B], [C]]
接下來,.sort()每個子陣列將每個字母與ki( key)的索引進行比較.findIndex():
a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
const key = ['T', 'F', 'S'];
let A = ['F', 'F', 'S', 'T', 'T'],
B = ['F', 'S'],
C = ['T', 'S', 'S', 'F'];
const sortByKeyIndex = (ki, ...arr) => {
return [...arr].map(a => a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
}
console.log(sortByKeyIndex(key, A, B, C));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/478935.html
標籤:javascript 数组 排序
上一篇:給定字串根據模式過濾其中的一部分,然后添加到陣列串列
下一篇:如何使用C結構實作最佳的類繼承?
