У меня есть массив элементов, которые содержат две переменные, индексы и типы, и мне нужно сгруппировать эти элементы по точному совпадению этих двух переменных.
[{ types: ['a', 'b'], indexes: ['i0', 'i1']}, { types: ['c', 'd'], indexes: ['i2', 'i3']}, ...]
В данный момент код создает массивсодержит уникальные пары индексов и типов из элементов, затем группирует их, просматривая и добавляя их во временный массив.Я считаю, что это делается с помощью lodash, а затем фильтруется для генерации пар.
Проблема в том, что в настоящее время он только проверяет, содержит ли элемент все типы и индексы, присутствующие в уникальных парах.Так что если есть пара с типами: a, b, c;он будет соответствовать любому, содержащему любую комбинацию этих трех, а не только этих трех.
Я добавил взаимную проверку .every, чтобы проверить обратный путь, но я не уверен, есть ли более эффективный способ сделатьthis.
Конечным результатом должен быть массив элементов, которые содержат только другие элементы, которые точно соответствуют обоим типам и индексам в обоих направлениях.
EDIT :
Итак, существующий код:
const distinctIndexTypes =
_.uniqWith(
Object.values(items).map(item => { indexes: item.indexes, types: item.types }),
_.isEqual,
);
const queries = [];
distinctIndexTypes.forEach(indexType => {
const aggs = [];
Object.values(items).forEach(item => {
if (
indexType.indexes.every(index => item.indexes.includes(index)) &&
item.indexes.every(index => indexType.indexes.includes(index)) &&
item.types.every(type => indexType.types.includes(type)) &&
indexType.types.every(type => item.types.includes(type))
) {
aggs.push(item);
}
});
if (aggs.length > 0) {
queries.push({
aggs,
});
}
});
Цель состоит в том, чтобы получить массив запросов, содержащих типы и индексы, которые в точности равны, чтобы уменьшить количество запросов от одного на элемент до одного.за отдельный набор.