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