根据数组内的数据对数组对象进行排序



假设我有一个像

这样的数组
[
{
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_updateprop对该数组进行排序?我预计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

最新更新