首页 > 解决方案 > 将嵌套对象相互排序

问题描述

我很难对嵌套对象进行内部排序。例如,我有嵌套数组对象,如下所示。

[
  {
    "project_id": "1155091124014397",
    "completed": [
       {
          "task_due_date": "2020-06-01",      
       },
       {
          "task_due_date": "2020-20-01",      
       },
       {
          "task_due_date": "2020-02-01",      
       },
    ],
  },
  {
    "project_id": "1155091124012597",
    "completed": [
       {
          "task_due_date": "2020-22-01",      
       },
       {
          "task_due_date": "2020-05-01",      
       },
       {
          "task_due_date": "2020-01-01",      
       },
    ],
  },
]

所以我试图对里面的每个完成的嵌套数组对象进行排序。但不确定如何处理。并尝试了类似下面的东西。

let sorted = array.map(element => {
   let nested = _.orderBy(element.completed, 'task_due_date');
   return nested
});

return sorted

但没有解决。

预期结果是

[
  {
    "project_id": "1155091124014397",
    "completed": [
       {
          "task_due_date": "2020-02-01",      
       },
       {
          "task_due_date": "2020-06-01",      
       },
       {
          "task_due_date": "2020-20-01",      
       },
    ],
  },
  {
    "project_id": "1155091124012597",
    "completed": [
       {
          "task_due_date": "2020-01-01",      
       },
       {
          "task_due_date": "2020-05-01",      
       },
       {
          "task_due_date": "2020-22-01",      
       },
    ],
  },
]

日期已排序。

标签: javascript

解决方案


首先,您需要将日期字符串转换为日期对象,然后您可以根据这些对象进行排序:

const arr = [
  {
    "project_id": "1155091124014397",
    "completed": [
       {
          "task_due_date": "2020-06-01",      
       },
       {
          "task_due_date": "2020-20-01",      
       },
       {
          "task_due_date": "2020-02-01",      
       },
    ],
  },
  {
    "project_id": "1155091124012597",
    "completed": [
       {
          "task_due_date": "2020-22-01",      
       },
       {
          "task_due_date": "2020-05-01",      
       },
       {
          "task_due_date": "2020-01-01",      
       },
    ],
  },
];

const toDate = dateStr => {
  const components = dateStr.split('-');
  const [year, date, month] = components;
  return new Date(`${year}-${month}-${date}`);
};

const sortByDate = (a, b) => {
  const aDate = toDate(a['task_due_date']);
  const bDate = toDate(b['task_due_date']);
  return aDate - bDate;
};

arr.forEach(el => {
  el.completed.sort(sortByDate);
});
console.log(arr);


推荐阅读