如何在JS中使用自定义字母对数组中的数组按字符串进行排序?

问题描述 投票:0回答:2

我有这个数组:

[
    ["ik", "p", "I; me", 1],
    ["pat", "pre", "plus", 1],
    ["qeol", "adj", "only", 1],
    ["nei", "adj", "not", 1]
]

我想按第一项按字母顺序对数组进行排序,并使用自定义字母表,其中 q 位于 n 和 o 之间。

所以,它应该看起来像:

[
    ["ik", "p", "I; me", 1],
    ["nei", "adj", "not", 1],
    ["qeol", "adj", "only", 1],
    ["pat", "pre", "plus", 1]
]

我尝试了 this 并尝试调整它,使 q 位于 n 和 o 之间,但没有任何效果。

words.sort(function(a, b) { 
    return a[0].toLowerCase() === "q" && a[0] < "n"? 1: (a[0] > b[0]? 1: -1);
});

我只是随机尝试了一些废话,所以当然没有任何效果

我该怎么做?

javascript arrays sorting multidimensional-array
2个回答
0
投票

您可以构建一个用于自定义排序的函数,方法是对一串字符进行排序,直到字符串结束。

const 
    data = [["ik", "p", "I; me", 1], ["pat", "pre", "plus", 1], ["qeol", "adj", "only", 1], ["nei", "adj", "not", 1]],
    alphabet = ' abcdefghijklmnqoprstuvwxyz',
    sortBy = alphabet => {
        const order = Object.fromEntries([...alphabet].map((l, i) => [l, i + 1]));
    
        return (a, b) => {
            for (let i = 0, min = Math.min(a.length, b.length); i < min; i++) {
                if (a[i] === b[i]) continue;
                return order[a[i]] - order[b[i]];
            }
            return a.length - b.length;
        };
    },
    custom = (fn => (a, b) => fn(a[0], b[0]))(sortBy(alphabet));

console.log(...["ikb", "nqq", "ik", "pat", "qeol", "nei", "npo", "nop", "ika"].sort(sortBy(alphabet)));

console.log(data.sort(custom));
.as-console-wrapper { max-height: 100% !important; top: 0; }


0
投票

希望这对您有帮助。

words.sort(function(a, b) { 
    return a[0] > b[0] ? 1: -1;
})
© www.soinside.com 2019 - 2024. All rights reserved.