繁体   English   中英

如何按命中数对字符串进行排序?

[英]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;
        });

你几乎明白了! 你只需要返回-11来告诉排序算法选择哪个值。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM