在JavaScript中,我有两个对象数组,它们具有相同的对象,但顺序不同。我正在尝试弄清楚如何根据一个数组的顺序对另一个数组进行排序。它们都有一个独特的字段(下面是sortField),我只是不知道如何对其进行排序。下面是我的数组的一个例子:
排序数组:
[
{
"displayName": "Party",
"sortField": "com.uniqueXbd",
"elementId": "PtyListPanel"
}, {
"displayName": "Group",
"sortField": "com.uniqueARd",
"elementId": "GrpListPaneARd"
}, {
"displayName": "Leader",
"sortField": "com.uniqueEcF",
"elementId": "LeaderListPaneEcF"
}
]needsSorted数组:
[
{
"displayName": "Group",
"sortField": "com.uniqueARd",
"elementId": "GrpListPaneARd"
}, {
"displayName": "Leader",
"sortField": "com.uniqueEcF",
"elementId": "LeaderListPanel"
}, {
"displayName": "Party",
"sortField": "com.uniqueXbd",
"elementId": "PtyListPaneEcF"
}
]我猜它会是这样的?
needsSorted.sort((a, b) => {
if(sorter.sortField...){
return 1
})谢谢
发布于 2020-01-31 00:10:15
const output = [];
sortedArray.forEach( sortedItem => {
const matchingItem = unsortedArray.find( unsortedItem => unsortedItem.sortField === sortedItem.sortField );
if(matchingItem){
output.push(matchingItem);
}
});因为您知道第二个数组是您希望第一个数组中的项的顺序,所以应该遍历它。然后从第一个列表中找到匹配的项目,并按该顺序将其推送到您的输出中。
发布于 2020-01-31 00:17:03
您可以进行排序查找,将排序关键字映射到原始数组中的索引。然后,在您的排序中,您可以在比较中查找这两个对象。
这用恒定时间的对象查找替换了每次比较时重复查找原始数组中的索引的需要,因此对于较大的数组,它应该以查找对象的空间为代价来提高性能。
let sortObj = [{"displayName": "Party","sortField": "com.uniqueXbd","elementId": "PtyListPanel"}, {"displayName": "Group","sortField": "com.uniqueARd","elementId": "GrpListPaneARd"}, {"displayName": "Leader","sortField": "com.uniqueEcF","elementId": "LeaderListPaneEcF"}]
let needsSorted = [{"displayName": "Group","sortField": "com.uniqueARd","elementId": "GrpListPaneARd"}, {"displayName": "Leader","sortField": "com.uniqueEcF","elementId": "LeaderListPanel"}, {"displayName": "Party","sortField": "com.uniqueXbd","elementId": "PtyListPaneEcF"}]
let sortLookup = sortObj.reduce((obj, item, idx) => {
obj[item.sortField] = idx
return obj
}, {})
needsSorted.sort((a,b) => sortLookup[a.sortField] - sortLookup[b.sortField])
console.log(needsSorted)
发布于 2020-01-31 00:13:03
var obj = [
{
"one": 1,
"two": 9
}, {
"one": 3,
"two": 5
}, {
"one": 1,
"two": 2
}
];
var obj = [
{
"one": 1,
"two": 2,
}, {
"one": 1,
"two": 9
}, {
"one": 3,
"two": 5
}
];
obj.sort(function(a, b) {
return a["one"] - b["one"] || a["two"] - b["two"];
});https://stackoverflow.com/questions/59989923
复制相似问题