javascript - 根据已排序的 "subset"数组的顺序有效地对无序的 "master"数组进行排序

标签 javascript arrays sorting

我有两个 ID 数组。一个是未过滤的 master 数组,它已根据单独的 dataset 对象中的值排序,其键是上述 ID)。另一个数组是masterfiltered 子集,其排序方式与master 相同。像这样:

const dataset = {a: {...}, b: {...}, c: {...}, d: {...}, e: {...}, f: {...}, g: {...}}
const master = ['a', 'b', 'c', 'd', 'e']
const filtered = ['a', 'c', 'd']

但是,有时排序标准会发生变化,因此我会重新对 master 数组进行排序。我可以然后重新过滤这个新排序的主数组以获得我的过滤数组,但我宁愿做的只是对filtered 数组基于 master 数组的新顺序,因为我认为这比再次运行我的过滤器更有效。

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

const mySort = (unsortedSubset, blueprint) => {
    // do sort here
}
const dataset = {a: {...}, b: {...}, c: {...}, d: {...}, e: {...}, f: 
const master = ['e', 'd', 'c', 'b', 'a']
const filtered = ['a', 'c', 'd']

const sortedFiltered = mySort(filtered, master)
console.log(sortedFiltered)
// ['d', 'c', 'a']

最佳答案

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

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);

关于javascript - 根据已排序的 "subset"数组的顺序有效地对无序的 "master"数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046168/

相关文章:

java - 如何按另一个 id 列表对 java 中的列表进行排序

javascript - 从不同字段以不同形式向服务器提交数据

javascript - Mocha : Is there a scenario where a before hook would run after a test?

JAVA程序计算从0开始的前n个能被3整除的偶数的总和并打印总和

c++ - 如何获取大小c++动态数组

python - 在 python 中已排序的 ("Error"字典的零索引位置插入列名称为 "Count", "error")

javascript - 如何更改嵌套在数组中对象数组中的对象的状态/setState?

javascript - 可以在没有持续回流的情况下动态调整高度的文本区域吗?

c++ - 使用 new 为 unsigned char 数组分配内存失败

javascript - 使用字符串搜索方法