[英]How to sort strings by hit count?
我有一個字符串數組
const arr = ['ACST', 'CST', 'CCST'];;
我有const word = 'CS';
如何對數組進行排序
const newArr = ['CST', 'CCST', 'ACST'];
我嘗試了類似的方法,但它看起來很糟糕,並且無法正常工作; 輸出CCST -> CST ...
,應該是CST -> CCST
arr.sort((a, b) => {
let A = 0;
let B = 0;
for (let i = 0; i < word.length; i++) {
if (a.charAt(i) === word.charAt(i)) {
A++;
}
if (b.charAt(i) === word.charAt(i)) {
B++;
}
}
return A + B;
});
你幾乎明白了! 你只需要返回-1
或1
來告訴排序算法選擇哪個值。
const arr = ['ACST', 'CST', 'CCST'];; const newArr = ['CST', 'CCST', 'ACST']; const word = 'CS' arr.sort((a, b) => { let A = 0; let B = 0; for (let i = 0; i < word.length; i++) { if (a.charAt(i) === word.charAt(i)) { ++A; } if (b.charAt(i) === word.charAt(i)) { ++B; } } return A > B ? -1 : 1; }); console.log(arr)
如果要按相應索引處的匹配字符數進行排序,則應在比較器函數中減去兩個字符串的計數(即A - B
為升序, B - A
為降序)。
const arr = ['ACST', 'CST', 'CCST']; const word = 'CS'; arr.sort((a, b) => { let A = 0; let B = 0; for (let i = 0; i < word.length; i++) { if (a.charAt(i) === word.charAt(i)) A++; if (b.charAt(i) === word.charAt(i)) B++; } return B - A; }); console.log(arr);
如果我理解正確:
const arr = ['CRST','CSX', 'CKST', 'CST', 'CCST']; var lastIndex = 0; console.log( arr.reduce((r, i, index) => { if (i.match(/^CS/) || i.match(/^CS./)) { r.unshift(i); lastIndex = lastIndex+1; } else if (i.match(/CS./)) { r.splice(lastIndex, 0, i); } else r.push(i); return r; }, []) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.