假设我有一个像
这样的数组[
{
id:"1",
name: "satu",
data: [
{
id: "1.a",
last_update: "07:00:00",
value: 12
},
{
id: "1.b",
last_update: "08:00:00",
value: 0
}
]
},
{
id:"2",
name: "dua",
data: [
{
id: "2.a",
last_update: "12:00:00",
value: 1
},
{
id: "2.a",
last_update: "06:00:00",
value: 5
},
]
},
{
id:"3",
name: "tiga",
data: [
{
id: "3.a",
last_update: "09:00:00",
value: 17
},
{
id: "3.b",
last_update: "10:00:00",
value: 2
}
]
}
]
我如何根据data
数组内的last_update
prop对该数组进行排序?我预计id=2
将是排序数组的第一个元素,其次是id=3
。最终结果应该如下所示
[
{
id:"2",
name: "dua",
data: [
{
id: "2.a",
last_update: "12:00:00",
value: 1
},
{
id: "2.a",
last_update: "06:00:00",
value: 5
},
]
},
{
id:"3",
name: "tiga",
data: [
{
id: "3.a",
last_update: "09:00:00",
value: 17
},
{
id: "3.b",
last_update: "10:00:00",
value: 2
}
]
},
{
id:"1",
name: "satu",
data: [
{
id: "1.a",
last_update: "07:00:00",
value: 12
},
{
id: "1.b",
last_update: "08:00:00",
value: 0
}
]
}
]
您可以将Array.sort
与您自己的排序函数一起使用
这里有一个简单的例子
let objs = [
{
id:"1",
name: "satu",
data: [
{
id: "1.a",
last_update: "07:00:00",
value: 12
},
{
id: "1.b",
last_update: "08:00:00",
value: 0
}
]
},
{
id:"2",
name: "dua",
data: [
{
id: "2.a",
last_update: "12:00:00",
value: 1
},
{
id: "2.a",
last_update: "06:00:00",
value: 5
},
]
},
{
id:"3",
name: "tiga",
data: [
{
id: "3.a",
last_update: "09:00:00",
value: 17
},
{
id: "3.b",
last_update: "10:00:00",
value: 2
}
]
}
]
function compare( a, b ) {
if ( a.data[0].last_update < b.data[0].last_update ){
return -1;
}
if ( a.data[0].last_update > b.data[0].last_update ){
return 1;
}
return 0;
}
objs.sort( compare );
看你的评论,也许你想添加更多的条件?我解决了,下面是可行的解决方案。
首先在每个对象中排序data
数组
data.sort((a, b) => Date.parse(b.last_update) - Date.parse(a.last_update))
则对主数组
进行排序main.sort(a, b) => Date.parse(b.data[0].last_update) - Date.parse(b.data[0].last_update));
假设每个对象至少有一个data
元素。
在我的实际代码中,我检查data
数组中是否至少有一个元素,以防止错误未定义索引0