我有一个对象数组:
data = [
{
type: "displayName"
base: {}
staged: {}
},
{
type: "bots"
base: {}
staged: {}
},
{
type: "bots"
base: {}
staged: {}
},
{
type: "whiteList"
base: {}
staged: {}
}
]
然后我有一个要用于订购data
数组的数组:
order = ["bots", "whiteList", "displayName"]
我需要根据每个对象data
订购type
我尝试过:
private orderChanges = (data: any[], order: any[]) => {
const orderedArray = [];
let len = Object.keys(data).length;
for (; len-- ;) {
const current = data[len];
const index = order.indexOf(current.resourceType);
orderedArray[index] = current;
}
return orderedArray;
}
虽然可行,但只会在orderedArray中返回单个type-> bots对象。
谢谢!
答案 0 :(得分:3)
不要重塑轮子,只需.sort
:
data.sort((a, b) => order.indexOf(b.type) - order.indexOf(a.type));
这需要数组的两个元素(a
和b
),在type
数组中获取其order
的索引,并返回这些索引的差回到排序功能。可能会发生三件事:
1)两者具有相同的顺序:因此它们也具有相同的索引,并且差异为0
,排序算法将它们保持在相同位置。
2)A的类型在order数组中处于较早的位置,索引较低,差异为正,因此算法将交换两个元素,从而A优先。
2)B的类型较早,B将移至第一个位置。
对数组中的所有元素重复此操作,直到它们完全排序为止。