javascript - 按具有空值的多个条件对对象数组进行排序

标签 javascript arrays sorting

好吧,我有一个对象数组,其中包含某个属性的空值。

出于排序目的,该对象大致如下所示...(40 个元素,但这就足够了...)。

需要根据roulette降序排序(roulette有时为空),然后是新颖性,然后是流行度.

我的头有点痛了。

这可以按降序对轮盘进行排序,但我需要如何扩展它以包含其他两个条件?

对象:

[
 {
  title: 'one',
  popularity: 4,
  novelty: 3
 },
 {
  title: 'two',
  popularity: 1
  novelty: 4
 },
 {
  title: 'three',
  popularity: 5,
  novelty: 3,
  roulette: 0
 },
 {
  title: 'four',
  popularity: 5,
  novelty: 3,
  roulette: 1
 }
]

部分工作功能:

  object.sort(function(a, b) {
    if (a['roulette'] == null) return 1
    if (b['roulette'] == null) return -1
    if (a['roulette'] === b['roulette']) return 0
    return b.roulette > a.roulette ? 1 : -1
  });

最佳答案

尝试按优先级和组进行排序。

var data = [{ title: 'one', popularity: 4, novelty: 3 }, { title: 'two', popularity: 1, novelty: 4 }, { title: 'three', popularity: 5, novelty: 3, roulette: 0 }, { title: 'four', popularity: 5, novelty: 3, roulette: 1 }, { title: 'five', popularity: 5, novelty: 4, roulette: null }, { title: 'six', popularity: 5, novelty: 5, roulette: undefined }];

data.sort(function (a, b) {
    return (
        (a.roulette === undefined || a.roulette === null) - (b.roulette === undefined || b.roulette === null) ||
        a.roulette - b.roulette ||
        a.novelty - b.novelty ||
        a.popularity - b.popularity
    );       
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按具有空值的多个条件对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40542564/

相关文章:

javascript - 我如何获取一个 JS 数组,它有一些元素也是数组,并使所有数组元素成为顶级元素

javascript - 计算段落相对于内容[数据]的高度(字符数)

PHP - json_encode 按数组中的元素升序显示它

java - 如何有效地将数组更改为数组列表

c# - WinForms:DataGridView - 编程排序

java - 如何将 <String, List<Object>> 的 Map 转换为 <Object, List<String>> 的 Map?

用于防止 Alt+Shift 默认操作或检测多种操作系统语言的 Javascript

javascript - 在不阻止组合框打开的情况下停止窃取焦点

php - Web 应用程序,Android 与 Iphone Scroll

Javascript Reverse 方法不会反转我的数组