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