У меня есть два массива идентификаторов. Один из них представляет собой нефильтрованный master
массив, который был отсортирован на основе значений в отдельном объекте dataset
, чьими ключами являются вышеупомянутые идентификаторы). Другой массив - это filtered
подмножество master
, которое сортируется так же, как и master
. Вот так:
const dataset = {a: {...}, b: {...}, c: {...}, d: {...}, e: {...}, f: {...}, g: {...}}
const master = ['a', 'b', 'c', 'd', 'e']
const filtered = ['a', 'c', 'd']
Однако иногда меняются критерии сортировки, поэтому я повторно сортирую master
массив. Затем я мог бы повторно фильтровать этот новый отсортированный массив, чтобы получить свой filtered
массив, но то, что я бы предпочел, это просто отсортировать 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);
Set
?