我有一个数组[1, 85, -1, -1, 25, 0]
我需要像这样排序:
[0, 1, 25, 85, -1, -1]
试图使用sort()方法,但是没有运气,因为它不是ASC顺序...
逻辑:值表示自上次订购起的天数。 -1
表示没有顺序。要求按最近订购的顺序订购。
答案 0 :(得分:3)
在sort
回调中,您收到两个参数(我通常将它们称为a
和b
)。如果a
应该位于b
之前,则返回负数;如果没关系(排序目的相同),则返回0;如果a
应该返回正数,则返回0。在b
之后。
在您的情况下,由于-1末尾(您已经说过没有其他负数),因此只需对它进行特殊大小写:
array.sort((a, b) => {
if (a === -1) { // < 0 would also work, since there aren't any others
return 1;
}
if (b === -1) { // "
return -1;
}
return a- b;
});
实时示例:
const array = [1, 85, -1, -1, 25, 0];
array.sort((a, b) => {
if (a === -1) {
return 1;
}
if (b === -1) {
return -1;
}
return a- b;
});
console.log(array);
那可以更加简洁,当然,我如上所述主要是为了最大程度地写它。但例如:
array.sort((a, b) => a === -1 ? 1 : b === -1 ? -1 : a - b);
我个人更喜欢比这更详细。但是...:-)
答案 1 :(得分:2)
您可以检查是否小于零,然后对其余的升序进行排序。
var array = [1, 85, -1, -1, 25, 0];
array.sort((a, b) => (a < 0) - (b < 0) || a - b);
console.log(array);
答案 2 :(得分:1)
您可以像往常一样sort()
,然后使用-1
和splice()
将push()
移至末尾。
let arr = [1, 85, -1, -1, 25, 0];
arr.sort((a, b) => a - b);
let idx = arr.findIndex(a => a != -1);
arr.push(...arr.splice(0, idx));
console.log(arr);