簡體   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