如何根据多个条件进行排序

问题描述 投票:0回答:1

我有一个数组

items
像这样:

items.sort(function(a,b) {
});

a & b 具有以下属性:

a.suggested (true, false, undefined)
a.meta.member_count (int .. 1 or more, undefined. 

我想按以下方式对项目进行排序:

  1. 所有不建议的项目。 false 或 undefined
  2. member_count,最高#第一,
  3. 然后显示任何建议 === true

sort 是解决这个问题的正确方法吗?我怎样才能在排序功能中实现这一点?

javascript sorting backbone.js underscore.js
1个回答
0
投票

这将按“建议”值排序,将错误/未定义的值置于真实值之上。之后,它将按 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。如果直接返回值之间的差异,它会将值作为字符串而不是数字进行比较。

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.