对属性上的对象数组进行排序,但首先保留缺少属性的对象
这是一个例子
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.order和b.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);