Javascript-按数组重新排列对象数组(值)

时间:2018-11-27 21:26:44

标签: javascript arrays typescript

我有一个对象数组:

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对象。

谢谢!

1 个答案:

答案 0 :(得分:3)

不要重塑轮子,只需.sort

  data.sort((a, b) => order.indexOf(b.type) - order.indexOf(a.type));

这需要数组的两个元素(ab),在type数组中获取其order的索引,并返回这些索引的差回到排序功能。可能会发生三件事:

1)两者具有相同的顺序:因此它们也具有相同的索引,并且差异为0,排序算法将它们保持在相同位置。

2)A的类型在order数组中处于较早的位置,索引较低,差异为正,因此算法将交换两个元素,从而A优先。

2)B的类型较早,B将移至第一个位置。

对数组中的所有元素重复此操作,直到它们完全排序为止。