[英]Sort a JS numerical array in specific order
我有一个数组[1, 85, -1, -1, 25, 0]
我需要这样排序: [0, 1, 25, 85, -1, -1]
尝试使用 sort() 方法,但没有运气,因为它不是按 ASC 顺序...
逻辑:这些值代表距离上次订单的天数。 -1
表示没有顺序。 要求按最近订购的顺序订购。
在sort
回调中,您会收到两个参数(我通常称它们为a
和b
)。 如果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.