按特定顺序对JS数值数组进行排序

时间:2020-09-10 11:48:48

标签: javascript sorting

我有一个数组[1, 85, -1, -1, 25, 0]

我需要像这样排序: [0, 1, 25, 85, -1, -1]

试图使用sort()方法,但是没有运气,因为它不是ASC顺序...

逻辑:值表示自上次订购起的天数。 -1表示没有顺序。要求按最近订购的顺序订购。

3 个答案:

答案 0 :(得分:3)

sort回调中,您收到两个参数(我通常将它们称为ab)。如果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(),然后使用-1splice()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);