首页 > 解决方案 > 按特定顺序按数字对对象数组进行排序

问题描述

我有以下数组 ob 对象:

let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]

并想以这种方式对其进行排序

let expected = [
{id: 1, number: 43},
{id: 3, number: 3},
{id: 4, number: undefined}, 
{id: 5, number: 1},
{id: 8, number: 36},
{id: 2, number: 0},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 69, number: 0}
]

所有编号为 0 的对象都应该在数组的末尾,但之前的顺序应该仍然存在

我试过 array.sort() 但没有收到想要的结果

标签: javascript

解决方案


您首先过滤非零对象,而不是零对象。然后连接两个数组。

let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]

const expected = [
  ...given.filter(item => item.number !== 0),
  ...given.filter(item => item.number === 0)
]

console.log(JSON.stringify(expected))

或者,如果您认为两个循环可能会影响您的应用程序性能,您可以使用一个循环。


推荐阅读