Я пробую следующую строку кодов. Я хочу, чтобы сохранить numbers
после каждой итерации внешнего в while
цикл в массиве с именем sn
. Но после каждой итерации sn
содержит только numbers
последней итерации. Может быть, мне не хватает целостной концепции sync
и async
.
function test() {
var numbers = [0, 2, 7, 0];
var check = true;
var sn = [];
var p = 0;
while (check) {
var index = numbers.indexOf(Math.max(...numbers));
var value = Math.max(...numbers);
numbers[index] = 0;
for (var i = value; i > 0; i--) {
var temp = ++index;
index = temp % (numbers.length);
numbers[index] += 1;
}
console.log("numbers", numbers);
if (sn.includes(numbers)) { check = false };
sn.push(numbers);
console.log("hey there=========");
}
}
test();
Здесь нет синхронизации или асинхронности.
Здесь происходит то, что вы пытаетесь нажать массив "numbers" в массив "sn".
Заявление: "sn.push (числа)";
Таким образом, мы нажимаем ссылку на объект массива чисел на "sn", означает, что вы не делаете копию массива чисел и не нажимаете на "sn". Вы просто нажимаете ссылку на память массива 'numbers'.
Поэтому во время первой итерации "sn" будет иметь точное значение, как вы рассчитываете.
Но во время второй итерации "sn" будет иметь два массива. Но эти два значения одинаковы и указывают на то же расположение памяти "number".
Итак, вот что вам нужно сделать, это создать клон массива 'numbers' во время каждой итерации.
if (sn.includes(numbers)) {check = false};
var cloneArray = numbers.slice(0);
sn.push(cloneArray);
Этот оператор if: if (sn.includes(numbers)) { check = false };
никогда не будет истинным, потому что метод Array.prototype.includes() не принимает массив в качестве параметра; только отдельные элементы. numbers
- это массив и, следовательно, никогда не будет правдивым.
Если вы пытаетесь увидеть, содержит ли массив массив. Ответ, который Mild Fuzz имеет в этом переполнении стека: массив Javascript содержит/включает вспомогательный массив, который должен работать.
if (sn.includes(numbers)) { check = false };
эта строка выполняется и дает ожидаемый результат. После каждой итерации цикла while генерируются numbers
массивов, и я хочу помещать этот массив каждый раз в другой массив sn
. Итак, наконец, я получаю массив sn
который содержит все предыдущие массивы numbers
качестве каждого элемента.
index
илиvalue
?