Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以字符串格式按日期对复杂对象数组排序_Javascript_Json_Sorting_Object_Ecmascript 6 - Fatal编程技术网

Javascript 以字符串格式按日期对复杂对象数组排序

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

我需要按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();
    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