Хорошо, я обманывал эту тему последние пару дней. Что опрятных (все без ОГРОМНЫЙ накладные расходы) способ создания массива всех возможных комбинацийВсе комбинации свойств в массиве
var input = [
{a: 1}, {a: 2, b: 3},
{b: 4}, {b: 5}, {a: 6}
];
Итак, что я хочу, чтобы генерировать следующий:
var output = [
{a: 1}, {b: 4}, {b: 5}, {a: 6},
{a: 1, b: 4}, {a: 1, b: 5},
{a: 6, b: 4}, {a: 6, b: 5},
{a: 2, b: 3}
];
Дело в том, однако, что в моем конкретный случай. Я говорю о 4 свойствах (и мне действительно нужно создать отдельный массив для каждого набора различных наборов свойств, однако это обе вещи, которые я должен реализовать позже). Однако я ищу только какой-то общий код psuedo о том, как подойти к этой проблеме, а не кому-то, пишущим это для меня или что-то в этом роде.
Я чувствую, что это должно было быть чем-то, что я должен был бы выяснить, но я просто не добираюсь туда. Сначала я генерирую отдельные массивы для всех комбинаций свойств (все a
, все b
, все c
, все ab
, все bc
, и т. Д.). Однако дело в том, что с 3-мя свойствами вы уже должны добавить для каждого a
все b
's, c
и bc
. Теперь написать это для одного свойства достаточно просто, но написать общее решение, которое делает это для n-свойств, просто полностью ускользает от меня.
@Teemu: Хотя мы говорим о 4 свойствах, общее количество сгенерированных элементов будет «всего» около 3000 (что вполне определенно не приведет к краху современного браузера, даже если количество сгенерированных элементов будет в 10 раз больше). Кроме того, я не уверен, откуда вы понимаете, что это будет запущено в браузере (что не так, его запуск при настройке приложения в node.js). –
Я предполагаю, что не понимаю, как ваш ввод относится к вашему результату или что представляет собой «комбинация» в вашем случае. Почему в вашем выпуске нет '{a: 2, b: 4}'? В чем разница между объектом, имеющим одно ключевое значение, и теми, у которых есть несколько пар ключ/значения? –
@MikeBrant: Что касается вашего первого вопроса: поскольку на входе нет {a: 2}. Вход пары с несколькими ключами/значениями уже представляет собой определенную комбинацию из двух элементов, которая идет прямо на выход, если длина равна количеству свойств. Если, однако, мы будем говорить о 3 свойствах, это будет объединено со всеми возможными значениями единственного 'c'. –