Код Nodejs не выполняется должным образом

1

Я пробую следующую строку кодов. Я хочу, чтобы сохранить 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();
  • 0
    Здесь нет синхронизации / асинхронности.
  • 0
    Вы хотите сохранить значения index или value ?
Показать ещё 4 комментария
Теги:
arrays
asynchronous
synchronous

2 ответа

4
Лучший ответ

Здесь нет синхронизации или асинхронности.

Здесь происходит то, что вы пытаетесь нажать массив "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);

  • 0
    Спасибо @ Рони, я упустил этот момент.
1

Этот оператор if: if (sn.includes(numbers)) { check = false }; никогда не будет истинным, потому что метод Array.prototype.includes() не принимает массив в качестве параметра; только отдельные элементы. numbers - это массив и, следовательно, никогда не будет правдивым.

Если вы пытаетесь увидеть, содержит ли массив массив. Ответ, который Mild Fuzz имеет в этом переполнении стека: массив Javascript содержит/включает вспомогательный массив, который должен работать.

  • 0
    if (sn.includes(numbers)) { check = false }; эта строка выполняется и дает ожидаемый результат. После каждой итерации цикла while генерируются numbers массивов, и я хочу помещать этот массив каждый раз в другой массив sn . Итак, наконец, я получаю массив sn который содержит все предыдущие массивы numbers качестве каждого элемента.
  • 0
    Спасибо @Sasha, это помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню