У меня есть массив объектов, например.Как извлечь все возможные совпадающие массивы объектов из одного массива объектов?
var arr = [
{"a": "x"},
{"b": "0"},
{"c": "k"},
{"a": "nm"},
{"b": "765"},
{"ab": "i"},
{"bc": "x"},
{"ab": "4"},
{"abc": "L"}
];
Скажем, я заинтересован только в объектах, ключи соответствуют var input = ["ab", "bc"]
. Это означает, что я хочу, чтобы извлечь все возможные подмассива с result[i].length == 2
следующим образом:
var result = [
[{"ab": "i"}, {"bc": "x"}],
[{"ab": "4"}, {"bc": "x"}] // or [{"bc": "x"}, {"ab": "4"}]
];
- то есть, порядок объектов в подмассивов совершенно не важно: Я заинтересован только в том, что каждый subarray содержит два объекта - {"ab": ...}
и {"bc": ...}
.
Если бы я был заинтересован в var input = ["a","a","ab"]
, то результат должен быть таким:
var result = [
[{"a": "x"}, {"a": "nm"}, {"ab": "i"}],
[{"a": "x"}, {"a": "nm"}, {"ab": "4"}]
];
Я не могу найти способ для достижения желаемого результата (при условии, что input.length
может быть гораздо больше, чем 2 или 3 - даже 15 -20 может быть недостаточным) без количества вычислений на уровне факториала, что физически невозможно. Есть ли способ получить разумную производительность для решения такой проблемы?
Важное примечание: да, очевидно, при относительно больших значениях input.length
теоретически может быть возможно иметь очень большое количество возможных комбинаций, но на практике result.length
всегда будет достаточно небольшим (возможно, 100-200, я даже сомневаюсь что он может достигнуть 1000 ...). Но для безопасности я хотел бы просто установить некоторый предел (скажем, 1000), так что, как только result.length
достигнет этого предела, функция просто возвращает текущий result
и останавливается.
@ DavinTryon: Шаг 1. Проверьте, содержит ли 'arr'' {"ab": значение} '. Если да, получите следующее '{" bc ": value}' и поместите их в 'result'. Шаг 2. проверьте, содержит ли 'arr'' {"bc": значение} '. Если да, получите следующее '{" ab ": value}' и поместите их в 'result'. И так далее, для чего требуется количество возможных ситуаций на факториале. –
Overcomplicated. IMO вы должны изменить свою модель данных, чтобы у вас не было проблем с фильтрацией и преобразованием данных. – Damiano
Не могли бы вы рассказать о том, как и почему ваш метод должен приводить пример вывода для '[" a "," a "," ab "]'? Как должен «алгоритм» решить, является ли значение частью первого * a * или последнего? Сначала сканируйте 'input', а затем решите, что есть больше 1 * a *, последний должен получить остальные? Или вы, возможно, действительно искали продукт найденных объектов для каждого ключа? –