我有一个数组
items
像这样:
items.sort(function(a,b) {
});
a & b 具有以下属性:
a.suggested (true, false, undefined)
a.meta.member_count (int .. 1 or more, undefined.
我想按以下方式对项目进行排序:
sort 是解决这个问题的正确方法吗?我怎样才能在排序功能中实现这一点?
这将按“建议”值排序,将错误/未定义的值置于真实值之上。之后,它将按 meta.member_count 排序(最高的在前)。
items.sort(function(a,b) {
if (a.meta.member_count === undefined) { x = 0; } else { x = a.meta.member_count;}
if (b.meta.member_count === undefined) { y = 0; } else { y = b.meta.member_count;}
if (a.suggested !== true) {
if (b.suggested !== true) {
n = x - y;
return n < 0 ? 1 : n > 0 ? -1 : 0;
}
return -1;
} else if (b.suggested === true) {
n = x - y;
return n < 0 ? 1 : n > 0 ? -1 : 0;
} else {
return 1;
}
});
本例中的关键在于将未定义的 member_count 值转换为 0,以便我们可以对它们进行数学运算。
此外,当使用 JavaScript sort() 函数对数字进行排序时,请确保对实际数字进行数学运算,然后使用 if 语句返回 1、-1 或 0。如果直接返回值之间的差异,它会将值作为字符串而不是数字进行比较。