使用过滤器对API列表进行排序

爱德华多·乌比奥拉

我正在尝试对一些保留进行排序,并希望它们按升序进行排序(过去几天少的保留首先显示),但我认为我使用的排序不正确。你能帮我么?例1例2

{
  "customerId": "[email protected]",
  "dueDate": 1614409200000,
  "reservationItems": [
    {
      "description": "Paddle",
      "itemId": 4949490,
      "returned": false
    },
    {
      "description": "Boat",
      "itemId": 4949490,
      "returned": false
    },
    {
      "description": "Boat",
      "itemId": 4949490,
      "returned": false
    },
    {
      "description": "Snowboard leash",
      "itemId": 4949494,
      "returned": false
    }
  ]
}

.filter((customer) =>
  customer.reservationItems.some((item) => !item.returned)
).sort((item) => item.dueDate);

坎南

考虑到API响应采用数组格式(您仅发布了对象示例,但想使用数组过滤器方法实现排序)。请尝试以下代码根据DueDate进行排序。

数组格式的API响应

var arr = [
  {
    customerId: "[email protected]",
    dueDate: 1614409200000,
    reservationItems: [
      { description: "Paddle", itemId: 4949490, returned: false },
      { description: "Boat", itemId: 4949490, returned: false },
      { description: "Boat", itemId: 4949490, returned: false },
      { description: "Snowboard leash", itemId: 4949494, returned: false },
    ],
  },
  {
    customerId: "[email protected]",
    dueDate: 161440920000,
    reservationItems: [
      { description: "Paddle", itemId: 4949490, returned: false },
      { description: "Boat", itemId: 4949490, returned: false },
      { description: "Boat", itemId: 4949490, returned: false },
      { description: "Snowboard leash", itemId: 4949494, returned: false },
    ],
  },
];

排序:

let sortedList = arr
  .filter((customer) =>
    customer.reservationItems.some((item) => !item.returned)
  )
  .sort((a, b) => a.dueDate - b.dueDate);

console.log(sortedList);

在此处检查输出-> https://codepen.io/askannan/pen/PobRbZq

编辑:

javascript sort()方法在对数字进行排序时将产生错误的结果。我们可以通过提供“比较功能”来解决此问题。(返回ab)

let arrSort = [11,2,6,5].sort() ->这将返回-> [11,2,5,6]

因为它只比较了第一个字符,所以javascript将11视为一个较小的数字。(在chrome控制台中尝试此操作)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章