我有这个数组:
[
["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);
});
我只是随机尝试了一些废话,所以当然没有任何效果
我该怎么做?
您可以构建一个用于自定义排序的函数,方法是对一串字符进行排序,直到字符串结束。
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; }
希望这对您有帮助。
words.sort(function(a, b) {
return a[0] > b[0] ? 1: -1;
})