使用自定义顺序对字符串数组进行排序

时间:2019-04-09 10:23:10

标签: javascript arrays sorting

对数组进行排序时,请说:

const arr = ["bad", "good", "all", "ugly"]

使用arr.sort()时,响应趋向于:

arr = ["all", "bad", "good", "ugly"]

但是如果我需要自定义排序,例如:

arr = ["bad", "good", "ugly", "all"]

即,出于示例的原因,您需要将“ all”元素推到排序数组的末尾而不是开始

我要做的是对数组进行排序,然后从数组中删除“ all”元素,只是在最后添加它,即

const a = _.pull(arr, "all");
a.splice(3, 0, "all")
console.log(a)     // ["bad", "good", "ugly", "all"]

有没有更好或更简单的方法?

3 个答案:

答案 0 :(得分:5)

您可以使用自定义比较器进行排序。像

[...arr].sort((x, y) => x === 'all' ? 1 : y === 'all' ? -1 : x.localeCompare(y))

const arr = ["bad", "good", "all", "ugly"];
console.log([...arr].sort((x, y) => x === 'all' ? 1 : y === 'all' ? -1 : x.localeCompare(y)))

答案 1 :(得分:0)

您可以使用OR运算符执行以下操作:

let arr = ["all", "bad", "all", "good", "ugly"]

arr.sort((a, b) => (a == "all") - (b == "all") || a.localeCompare(b))

console.log(arr)

减布尔返回一个数字(true - false === 1)。如果其中一个字符串为"all",则根本不会检查第二个条件。

答案 2 :(得分:0)

我认为下面的一个是闲置的。因为在进行自我排序时,您可以将“全部”拖到末尾

let list = ["all", "bad", "good", "ugly"]
list.sort((a, b) => {
    if(a === 'all') {return 1;}
    if(b === 'all') {return -1;}
    if(a < b) { return -1; }
    if(a > b) { return 1; }
    return 0
})
console.log(list)