如何在JavaScript中根据嵌套数组的长度对对象数组进行排序

假设我们有一个对象数组,其中包含嵌套的对象数组,如下所示:

const arr = [
   { name: "Cat1", elements : [
   { name: name, id: id } ]
},
{ name: "Cat2", elements : [
   { name: name, id: id },
   { name: name, id: id },
   { name: name, id: id } ]
},
{ name: "Cat3", elements : [
   { name: name, id: id },
   { name: name, id: id } ]
   }
];

我们需要编写一个包含一个这样的数组的JavaScript函数。该函数应对此对象数组进行排序。

在“元素”数组属性中包含更多对象的对象应排名更高。

因此,对数组进行排序后应如下所示:

const output = [
   { name: "Cat2", elements : [
      { name: name, id: id },
      { name: name, id: id },
      { name: name, id: id } ]
   },
   { name: "Cat3", elements : [
      { name: name, id: id },
      { name: name, id: id } ]
   },
      { name: "Cat1", elements : [
      { name: name, id: id } ]
   }
];

示例

为此的代码将是-

const arr = [
   { "name": "Cat1", elements : [
   { "name": "name", "id": "id" } ]
   },
   { "name": "Cat2", elements : [
   { "name": "name", "id": "id" },
   { "name": "name", "id": "id" },
   { "name": "name", "id": "id" } ]
   },
   { "name": "Cat3", elements : [
   { "name": "name", "id": "id" },
   { "name": "name", "id": "id" } ]
   }
];
const sorter = (a, b) => {
   if(a.elements.length > b.elements.length) {
      return −1;
   } else {
      return 1;
   }
}
arr.sort(sorter);
console.log(JSON.stringify(arr, undefined, 4));

输出结果

控制台中的输出将是-

[
   {
      name": "Cat2",
      "elements": [
         {
            "name": "name",
            "id": "id"
         },
         {
            "name": "name",
            "id": "id"
         },
         {
            "name": "name",
            "id": "id"
         }
      ]
      },      
      {
         "name": "Cat3",
         "elements": [
      {
         "name": "name",
         "id": "id"
      },
      {
         "name": "name",
         "id": "id"
      }
      ]
   },
   {
      "name": "Cat1",
      "elements": [
         {
            "name": "name",
            "id": "id"
         }
      ]
   }
]