对数组进行排序时,请说:
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"]
有没有更好或更简单的方法?
答案 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)