Я пытаюсь получить каждую комбинацию элементов в массив. Теперь я могу использовать метод, описанный ниже, и удалить дубликаты, но этот путь - слишком медленный для моего использования.
Код ниже найдет каждую возможную комбинацию для 2 цифр ниже 4. Теперь в коде, для которого я действительно хочу использовать это, наименьший возможный код будет 6 для циклов (внутри друг друга) с сумма 18 (помните, это минимум).
Приведенный ниже код будет выполнять amount^[amount of for loops]
или amount^2
, что в данном случае равно 16. Это означает, что в коде, для которого я хочу использовать это, он выполняется 18^6
раз или 34 миллиона раз . И это минимум, который мог бы получить намного выше.
После попытки запустить мой код (с 6 циклами foor, в которых amount = 18
) он сломал мой браузер ... Мой вопрос: Есть ли что-то быстрее и эффективнее ( нет элегантно. Мне все равно, насколько элегантно это ), в котором мой браузер не падает,
Примечание: Этот вопрос не является дублирующим вопросом. Все остальные вопросы просто спрашивают, как это сделать, однако у меня уже есть способ. Я просто пытаюсь сделать его более эффективным и быстрым, чтобы он действительно работал правильно.
let combinations = [];
let amount = 4;
for (let a = 0; a < amount; a++) {
for (let b = 0; b < amount; b++) {
combinations.push(`${a}${b}`);
}
}
console.log(combinations);
Ниже приведен фрагмент, содержащий возможный пример того, как мой код будет работать.
let possibilities = [];
let amount = 6; //Amount is set by me, so don't worry about it being incorrect
for (let a = 0; a < amount; a++) {
for (let b = 0; b < amount; b++) {
possibilities.push(a + b);
}
}
possibilities = [...new Set(possibilities)]; //Removes duplicates
possibilities.sort((a, b) => b - a); //Sorts in descending order
possibilities = possibilities.slice(0, 3); //Gets top 3 values
console.log(possibilities);