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)
你快到了。只需在没有日期时提供默认值。另外,排序要求您返回一个数字,在您返回一个布尔值时,该布尔值将被转换为 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)