繁体   English   中英

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

[英]Sort a JS numerical array in specific order

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

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

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

逻辑:这些值代表距离上次订单的天数。 -1表示没有顺序。 要求按最近订购的顺序订购。

sort回调中,您会收到两个参数(我通常称它们为ab )。 如果a应该在b之前,则返回负数,如果无关紧要,则返回 0(出于排序目的,它们是相同的),如果a应该在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);

就我个人而言,我更喜欢比这更冗长的内容。 但... :-)

您可以检查是否小于零并按升序对其余部分进行排序。

 var array = [1, 85, -1, -1, 25, 0]; array.sort((a, b) => (a < 0) - (b < 0) || a - b); console.log(array);

您可以像往常一样sort() ,然后使用splice()push()-1显式移动到末尾。

 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM