【问题标题】:Sort an array according to a property which may be null根据可能为空的属性对数组进行排序
【发布时间】:2020-09-22 13:41:42
【问题描述】:

我有一个对象数组:

let items = [
  { name: 'eric', value: 1 },
  { name: 'bob', value: 4 },
  { name: 'michael', value: 0 },
  { name: 'john', value: 3 },
  { name: 'brad', value: null },
  { name: 'martin', value: 2 },
  { name: 'chris', value: null }
];

我想对我的数组进行排序,以便可以按“值”属性对对象进行排序,如果它为空,则将对象放在数组的底部:

  { name: 'michael', value: 0 },
  { name: 'eric', value: 1 },
  { name: 'martin', value: 2 },
  { name: 'john', value: 3 },
  { name: 'bob', value: 4 },
  { name: 'brad', value: null },
  { name: 'chris', value: null }

->

我试过这个;

items.sort((a, b) => {
    return (a.orde ===null)-(b.ordre===null) || +(a.ordre>b.ordre)||-(a.ordre<b);
});

但是好像不行

建议?

【问题讨论】:

    标签: javascript typescript sorting ecmascript-6 ecmascript-5


    【解决方案1】:

    您可以评估lodash 的使用情况并执行以下操作:

    const items = [
      { name: 'eric', value: 1 },
      { name: 'bob', value: 4 },
      { name: 'michael', value: 0 },
      { name: 'john', value: 3 },
      { name: 'brad', value: null },
      { name: 'martin', value: 2 },
      { name: 'chris', value: null }
    ];
    
    const orderedItems = lodash.orderBy(items, 'value');
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您可以先检查null,然后按值排序。

      let items = [{ name: 'eric', value: 1 }, { name: 'bob', value: 4 }, { name: 'michael', value: 0 }, { name: 'john', value: 3 }, { name: 'brad', value: null }, { name: 'martin', value: 2 }, { name: 'chris', value: null }];
      
      items.sort(({ value: a }, { value: b }) => (a === null) - (b === null) || a - b);
      
      console.log(items);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 2011-05-27
        • 2020-03-17
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多