Javascript 基于对象的内部数组对对象数组进行排序

Javascript 基于对象的内部数组对对象数组进行排序,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个对象数组: myData = [{ name: "", lastName:"", moreData: [{ left: 5, data: '', }, { left: 3, data: '', } ] }, { name: "", lastNam

我有一个对象数组:

   myData = [{
       name: "",
       lastName:"",
       moreData: [{
           left: 5,
           data: '',

        },
         {
           left: 3,
           data: '',

        }
     ]



   },
   {
       name: "",
       lastName:"",
       moreData: [{
           left: 8,
           data: '',

        },
         {
           left: 4,
           data: '',

        }
     ]
  }
  ],
我需要根据左:,降序,对外部对象(主数组)进行排序, 所以我会有这样的结果:

   myData = [{
       name: "",
       lastName: "",
       moreData: [{
            left: 8,
            data: '',
     }]

  },
  {
       name: "",
       lastName: "",
       moreData: [{
            left: 5,
            data: '',
     }]

  },
{
       name: "",
       lastName: "",
       moreData: [{
            left: 4,
            data: '',
     }]

  },

{
       name: "",
       lastName: "",
       moreData: [{
            left: 3,
            data: '',
     }]

  }

  ]
或者,有没有一种方法可以只对更多的数据进行排序,而不管它属于哪个对象,并保存这些数据,然后能够识别这些数据属于谁的用户

我需要根据在its数组中包含多个对象的列对数组进行排序。因此,外部对象将被重复 使用JS,必要时甚至可以使用Lodash。 有任何指导吗?

基于:

下面是一个根据提供的stackoverlow链接的小示例。 它肯定不是最优雅的解决方案,因为代码对于您的案例来说是非常静态的,但是您可以对其进行改进。代码内部的解释

myData = [{
    name: "Test",
    lastName:"1",
    moreData: [{
        left: 5,
        data: '',

     },
      {
        left: 3,
        data: '',

     },
     {
        left: 7,
        data: '',

     }
  ]



},
{
    name: "Test",
    lastName:"2",
    moreData: [{
        left: 8,
        data: '',

     },
      {
        left: 4,
        data: '',

     },
     {
        left: 9,
        data: '',

     }
  ]
}
];
代码:


欢迎来到Stackoverflow,您的问题已经被问过多次了。在发布问题之前,我建议使用搜索功能。类似的内容应该回答您的问题@Doomenik My question的可能重复项有所不同,因为它需要根据一个属性对对象数组进行排序,该属性也是对象数组。所以这些对象有一个字段,我需要取这个字段,以便进行相应的排序。我的预期结果更清楚地说明了这一点,因为您可以看到,如果因为我需要的顺序,对象可以重复。链接还说明了如何构建自定义排序,或者在排序之前简单地拆分数组。我将添加一个快速的示例。对于其他数据,这并不能很好地分割它们。当我得到:Name:LastName moreData:[{},{},{},{}]-->在更多数据中有多个obejct。代码的目的不是要为每个对象将多个对象拆分为一个吗?@JennyJ是的,您可以添加任意多的数据。我自己试过了,效果很好。但我的意思是,它不会为moreData中的每个对象分割成一个对象。相反,我得到的东西和我在beginning@JennyJ如果您查看结果,结果与您的示例完全相同,每个moreData将分割两个对象,并按左侧的属性进行排序。我又添加了1个数据,就像你看到的那样,结果中有6个元素。啊,我道歉!我通过了整个1级考试(包括更多的数据,让人困惑),非常感谢!!
myDataSplit = [];
//First we have to get ride of the multiple data in moreData
myData.forEach(level1 => {
    level1.moreData.forEach(level2 => {
        //Here we build a new array with a element for each moreData
        //If you want it more flexible push the whole level1 and replace moreData with level2
        myDataSplit.push({name: level1.name, lastName: level1.lastName, moreData: level2});
    });
});

//Now the compare like in the SO link
function compare(a,b) {
    if (a['moreData'].left < b['moreData'].left)
      return -1;
    if (a['moreData'].left > b['moreData'].left)
      return 1;
    return 0;
  }

  myDataSplit.sort(compare);
  console.log(myDataSplit);
​​​​Quokka #2 (node: v9.5.0)​​​​
​​​​​​​​​​
​​​​​[ { name: 'Test', lastName: '1', moreData: { left: 3, data: '' } },​​​​​
​​​​​  { name: 'Test', lastName: '2', moreData: { left: 4, data: '' } },​​​​​
​​​​​  { name: 'Test', lastName: '1', moreData: { left: 5, data: '' } },​​​​​
​​​​​  { name: 'Test', lastName: '1', moreData: { left: 7, data: '' } },​​​​​
​​​​​  { name: 'Test', lastName: '2', moreData: { left: 8, data: '' } },​​​​​
​​​​​  { name: 'Test', lastName: '2', moreData: { left: 9, data: '' } } ]​​​​​
  at ​​​myDataSplit​​​ ​quokka.js:61:2​