根据已排序的“主”数组的顺序有效地对无序的“子集”数组进行排序

时间:2018-10-29 13:06:49

标签: javascript arrays sorting

我有两个ID数组。一个是未经过滤的master数组,该数组已根据单独的dataset对象中的值进行了排序,该对象的键是上述ID。另一个数组是filtered的{​​{1}}子集,其排序方式与master相同。像这样:

master

但是,有时排序标准会更改,因此我对const dataset = {a: {...}, b: {...}, c: {...}, d: {...}, e: {...}, f: {...}, g: {...}} const master = ['a', 'b', 'c', 'd', 'e'] const filtered = ['a', 'c', 'd'] 数组进行了重新排序。我可以,然后重新过滤这个新排序的主数组,以获得我的master数组,但我要做的只是对{{1 }}数组基于filtered数组的新顺序,因为我认为这比再次运行过滤器更有效。

但是,我不确定该怎么做。为了清楚起见,我认为我想要这样的流程:

filtered

1 个答案:

答案 0 :(得分:1)

您可以通过使用过滤后的数组进行查找来过滤主数组。

const
    mySort = (subset, blueprint) => blueprint.filter(v => subset.includes(v));
    dataset = { e: {}, d: {}, c: {}, b: {}, a: {} },
    master = ['e', 'd', 'c', 'b', 'a'],
    filtered = ['a', 'c', 'd'],
    sortedFiltered = mySort(filtered, master);

console.log(sortedFiltered);

带有Set

的版本

const
    mySort = (subset, blueprint) => blueprint.filter(Set.prototype.has, new Set(subset));
    dataset = { e: {}, d: {}, c: {}, b: {}, a: {} },
    master = ['e', 'd', 'c', 'b', 'a'],
    filtered = ['a', 'c', 'd'],
    sortedFiltered = mySort(filtered, master);

console.log(sortedFiltered);