Javascript 以字符串格式按日期对复杂对象数组排序
我需要按key.expiry.value对这个名为gridObj的数组进行排序 我尝试了以下方法,但没有结果:Javascript 以字符串格式按日期对复杂对象数组排序,javascript,json,sorting,object,ecmascript-6,Javascript,Json,Sorting,Object,Ecmascript 6,我需要按key.expiry.value对这个名为gridObj的数组进行排序 我尝试了以下方法,但没有结果: const sorted = Object.keys(gridObj).map((val) => gridObj[val]?.expiry?.sort((a, b) => { const aa = a.value.split('/').reverse(); const bb = b.value.split('/').reverse(); retur
const sorted = Object.keys(gridObj).map((val) => gridObj[val]?.expiry?.sort((a, b) => {
const aa = a.value.split('/').reverse();
const bb = b.value.split('/').reverse();
return (aa > bb) - (aa < bb);
}));
为此:
gridObj = [
"11566261": [
expiry: {
header: "Expiry",
value: "10/08/2023"
}
],
"11566260": [
expiry: {
header: "Expiry",
value: "14/08/2023"
}
],
]
你的数据有点挑剔。当其中一个假设不成立时,这里存在错误的空间。(多个键、数组中的多个项等)
gridObj.sort((a,b)=>{
const aa=新日期(a[Object.keys(a)[0]][0].expiry.value);
const bb=新日期(b[Object.keys(b)[0]][0].expiry.value);
返回(aa>bb)-(aa
您的数据确实有点不寻常。您将无法使用Array.sort,因为数组长度为零。因此,您需要将其转换为一个数组,对其进行排序,然后将其转换回初始“数组”(基本上是一个具有某些属性的数组)。
此代码应执行以下操作:
Object.keys(gridObj) // get all the keys
.map(e=> ({key: e, val: gridObj[e]})) // transform it into key-value tuples so we can sort the array by date
.sort((a, b) => {
const aa = a.val.expiry.value.split('/').reverse(); // [YYYY, MM, MMDD]
const bb = b.val.expiry.value.split('/').reverse();
return (aa > bb) - (aa < bb); // convert arrays to string and compare
}).reduce((acc, crt) => { // transform sorted tuples into sorted array
acc[crt.key] = crt.val;
return acc
}, Array()) // pass an empty array as accumulator
Object.keys(gridObj)//获取所有键
.map(e=>({key:e,val:gridObj[e]}))//将其转换为键值元组,以便按日期对数组排序
.排序((a,b)=>{
常量aa=a.val.expiry.value.split('/').reverse();/[YYYY,MM,MMDD]
const bb=b.val.expiry.value.split('/').reverse();
返回(aa>bb)-(aa{//将排序的元组转换为排序的数组
acc[crt.key]=crt.val;
返回acc
},Array()//将空数组作为累加器传递
您能否将一小部分测试数据作为文本包含在内。这很有帮助。有关更多信息,请参见是!补充问题
Object.keys(gridObj) // get all the keys
.map(e=> ({key: e, val: gridObj[e]})) // transform it into key-value tuples so we can sort the array by date
.sort((a, b) => {
const aa = a.val.expiry.value.split('/').reverse(); // [YYYY, MM, MMDD]
const bb = b.val.expiry.value.split('/').reverse();
return (aa > bb) - (aa < bb); // convert arrays to string and compare
}).reduce((acc, crt) => { // transform sorted tuples into sorted array
acc[crt.key] = crt.val;
return acc
}, Array()) // pass an empty array as accumulator