javascript - 使用两个排序条件对javascript中的对象数组进行排序

标签 javascript arrays sorting object

我的对象数组如下。

let obj=[
{
  id:1,
  pinnedBy:"abc",
  value:9
},
{
  id:2,
  pinnedBy:null,
  value:10
},
{
  id:3,
  pinnedBy:"abc",
  value:11
},
{
  id:4,
  pinnedBy:null,
  value:12
},
];
我的排序条件是
  • 值为 NOT null 的 pinnedBy 项目应位于顶部,并且应按值降序排序。
  • 所有其他项目应低于 pinnedBy 项目,并应按值降序排序。

  • 应用排序结果后将是
    obj=[
    {
      id:3,
      pinnedBy:"abc",
      value:11
    },
    {
      id:1,
      pinnedBy:"abc",
      value:9
    },
    {
      id:4,
      pinnedBy:null,
      value:12
    },
    {
      id:2,
      pinnedBy:null,
      value:10
    }
    ];
    
    我怎样才能做到这一点?

    最佳答案

    您可以按 bool 值的 delta 排序,然后按 value 排序属性(property)。

    let array = [{ id: 1, pinnedBy: "abc", value: 9}, { id: 2, pinnedBy: null, value: 10 }, { id: 3, pinnedBy: "abc", value: 11 }, { id: 4, pinnedBy: null, value: 12 }];
    
    array.sort((a, b) =>
        (a.pinnedBy === null) - (b.pinnedBy === null) ||
        b.value - a.value
    );
    
    console.log(array);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    关于javascript - 使用两个排序条件对javascript中的对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64783620/

    相关文章:

    javascript - 在全局范围内运行 javascript 函数

    java - 整数数组的反向复制

    javascript - 刷新后在网站上运行 javascript

    javascript - 随着时间的流逝,是否可以显示检索到的评论?

    javascript - 如何在 JavaScript 中以增量方式调用数组的 INDEX 值

    php - 将 while() 数组传递给 php 中的 while() 变量

    python - CLRS 中伪代码的问题

    python - MRJob 排序 reducer 输出

    VB.NET 查找字符串中两个单词之间的文本

    javascript - HTML5 拖放内容类型?