Я имею дело с немного странной проблемой перестановки через n число заданных массивов.
Скажем, у меня есть 3 массива (но может быть и больше):
Я хочу рассчитать все возможные перестановки длин этих трех массивов.
Результат должен выглядеть примерно так:
Мне действительно нужен вывод вроде этого. Я не забочусь о значениях, назначенных массивам в точке.
К сожалению, у меня нет рабочего кода для обмена. Я обновлю это сообщение, как только придумаю что-то, что даже отдаленно работает.
Вы можете использовать структуру вложенных сокращений для произвольной длины заданного массива со значениями.
var words = [['quick', 'lazy'], ['brown', 'black', 'grey'], ['fox', 'dog']],
result = words.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы можете сделать более подробный подход, где вы можете добавить некоторую логику к собранному результату, где происходит толкание.
function getCombinations(array) {
function iter(i, p) {
if (i === array.length) {
result.push(p); // <==================== use the items
return;
}
array[i].forEach(function (a) {
iter(i + 1, p.concat(a));
});
}
var result = [];
iter(0, []);
return result;
}
var words = [['quick', 'lazy'], ['brown', 'black', 'grey'], ['fox', 'dog']],
result = getCombinations(words);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
new Array
, он указывает длину, которую нужно назначить.