如何按时间戳对数组进行排序?

Sil*_*fer 1 javascript arrays sorting jquery ecmascript-6

我正在尝试array按时间戳值对此进行排序。我想按升序对它们进行排序,如果其中任何一个具有不确定的属性,请将其放在最后。我目前遇到错误Cannot read property 'first_release_date' of undefined。怎么解决这个问题呢?

var array = 
[
  {
    "id": 1969,
    "cover": {
      "id": 1960,
      "url": "image.jpg"
    },
    "first_release_date": 1083542400,
    "name": "Item 1"
  },
  {
    "id": 113242,
    "name": "Item 2"
  },
  {
    "id": 25076,
    "first_release_date": 1540512000,
    "name": "Item 3"
  },
  {
    "id": 1969,
    "cover": {
      "id": 1960,
      "url": "image.jpg"
    },
    "name": "Item 4"
  },
  {
    "id": 9245,
    "first_release_date": 1292976000,
    "name": "Item 5"
  }
];

Object.keys(array).forEach((key) => {
  console.log(`Before: ${array[key].name}`)
});

array.sort((a,b) => a.array.first_release_date > b.array.first_release_date);

Object.keys(array).forEach((key) => {
  console.log(`After: ${array[key].name}`)
});
Run Code Online (Sandbox Code Playgroud)

Shi*_*lly 5

你快到了。只需在没有日期时提供默认值。另外,排序要求您返回一个数字,在您返回一个布尔值时,该布尔值将被转换为 0 或 1。这将破坏您想要返回负数的情况的排序。

var array = 
[
  {
    "id": 1969,
    "cover": {
      "id": 1960,
      "url": "image.jpg"
    },
    "first_release_date": 1083542400,
    "name": "Item 1"
  },
  {
    "id": 113242,
    "name": "Item 2"
  },
  {
    "id": 25076,
    "first_release_date": 1540512000,
    "name": "Item 3"
  },
  {
    "id": 1969,
    "cover": {
      "id": 1960,
      "url": "image.jpg"
    },
    "name": "Item 4"
  },
  {
    "id": 9245,
    "first_release_date": 1292976000,
    "name": "Item 5"
  }
];

Object.values(array).forEach((val) => {
  var d = new Date(val.first_release_date*1000).getFullYear();
  console.log(`Before: ${ val.name} ${d }`)
});

array.sort((a,b) => ( a.first_release_date || Number.POSITIVE_INFINITY ) - ( b.first_release_date || Number.POSITIVE_INFINITY ));

Object.values(array).forEach((val) => {
  var d = new Date(val.first_release_date*1000).getFullYear();
  console.log(`After: ${ val.name} ${d }`)
});

var reverse = JSON.parse( JSON.stringify( array ));

reverse.sort((a,b) => ( b.first_release_date || Number.NEGATIVE_INFINITY ) - ( a.first_release_date || Number.NEGATIVE_INFINITY ));

console.log( reverse );
Run Code Online (Sandbox Code Playgroud)