【问题标题】:Sort array of objects by date property按日期属性对对象数组进行排序
【发布时间】:2020-02-19 14:58:12
【问题描述】:

大家好,我想按“New_date”对数组进行排序,但在某些情况下,主对象内部还有另一个对象,键为“New_date”。你知道在这种情况下如何对数组进行排序吗?

  arr.sort(function(a, b) {

        a = new Date(a.New_date);
        b = new Date(b.New_date);
        return a>b ? -1 : a<b ? 1 : 0;
    });

arr= 
[0: {name:"Angel", data "random data", New_date: "2020-12-10"},  
 1: [0: {name:"Tom", data "random data"},
     1: {name:"Tom", data "random data"},
     New_date:"2020-11-10"],  
 2:name:"Angel", data "random data", New_date: "2020-09-10"}]

【问题讨论】:

  • return a.getTime() - b.getTime()
  • ps。只要您首先定义数组,您的排序就会起作用,如果您想要降序排序,如果您想要使用 getTime 进行降序排序,只需反转条件 -> return b.getTime() - a.getTime()..
  • 另外,您的排序比较函数不需要创建新对象。只需比较它们并返回一个小于、等于或大于零的值。您可以通过这种方式轻松地对一个或多个字段进行排序。
  • 首先,这与 jQuery 完全无关。您正在使用普通的 JS sort() 方法。其次,您能否提供一个实际的数组示例。问题中的那个有很多语法问题。
  • 您正在混合数组和对象。请确保你给出了一个有效的例子。您提供的示例不是有效的 javascript 结构。

标签: javascript arrays sorting javascript-objects


【解决方案1】:

这是一个正确格式化数组的解决方案。

let arr = [
  { name: "Angel", data: "random data", New_date: "2020-12-10" },
  { name: "Tom", data: "random data", New_date: "2019-11-10" },
  { name: "Tom", data: "random data", New_date: "2020-11-10" },
  { name: "Angel", data: "random data", New_date: "2020-09-10" },
]
console.log('ascending', arr.sort((a, b) => new Date(a.New_date) - new Date(b.New_date)))
console.log('descending', arr.sort((a, b) => new Date(b.New_date) - new Date(a.New_date)))

【讨论】:

  • 您的解决方案有效,但前提是内部没有其他值为 New_date 的数组。
  • 你应该有对象数组或数组数组。混合这些不是一个好习惯。您需要在这两个选项之间做出决定。您始终可以将这些数组放在包含 New_date 的对象中。
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
相关资源
最近更新 更多