对属性上的对象数组进行排序,但首先保留缺少属性的对象

这是一个例子

testWidgetOrderSort = [
        { "_id": "name", "order": 1 },
        { "_id": "is", "order": 2 },
        { "_id": "my", "order": 0 },
        { "_id": "oh I would be very first" },
        { "_id": "adam", "order": 3 }

      ]

这里的对象 { "_id": "oh I would be very first" } 没有属性顺序,所以它应该放在第一位。然后其余的对象应该根据属性“order”进行排序 所以排序后应该是,

 output= [ { _id: 'oh I would be very first' },
      { _id: 'my', order: 0 },
      { _id: 'name', order: 1 },
      { _id: 'is', order: 2 },
      { _id: 'adam', order: 3 } ]

回答

逻辑是基本的数组排序逻辑。

  • 如果a.orderb.order都被定义,则根据最大值返回 1 或 -1。
  • 如果其中之一未定义,则根据定义的值返回 1 或 -1。
  • 请注意:该值1-1确定这两个节点之间的相对位置。回到1地方a后,b-1地方a之前b

const testWidgetOrderSort = [
  { "_id": "name", "order": 1 },
  { "_id": "is", "order": 2 },
  { "_id": "my", "order": 0 },
  { "_id": "oh I would be very first" },
  { "_id": "adam", "order": 3 }
];
const output = testWidgetOrderSort.sort((a, b) => {
  if( a.order !== undefined && b.order !== undefined ) {
    return a.order > b.order ? 1 : -1;
  } else {
    return a.order !== undefined ? 1 : -1
  }
});
console.log(output);


以上是对属性上的对象数组进行排序,但首先保留缺少属性的对象的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>