Неожиданные значения внутри цикла for - PullRequest
1 голос
/ 21 февраля 2020

Я абсолютно озадачен тем, почему переменная end не меняется в течение всего цикла. Хотя я успешно увеличиваю переменную j, она не меняет значение переменной end, которая содержит фрагмент кода, ссылающийся на переменную j. Может кто-нибудь помочь мне с этим?

const numbers = [0, 1, 0, 2, 3, 5, 0, 10, 88];

function moveZeros(arr) {
  const lastIndex = arr.length - 1;
  let j = 0;
  let end = arr[lastIndex - j];

  for (let item of arr) {
    console.log(end); // odd behavior 
    console.log(j++); // behaves as expected 
  }
  console.log(end) // odd behavior
}
console.log(moveZeros(numbers));

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020
const numbers = [0, 1, 0, 2, 3, 5, 0, 10, 88];

function moveZeros(arr) {
  const lastIndex = arr.length - 1;
  let j = 0;
  let end = (j)=>{arr[lastIndex - j]};

  for (let item of arr) {
    console.log(end(j)); // odd behavior 
    console.log(j++); // behaves as expected 
  }
  console.log(end) // odd behavior
}
console.log(moveZeros(numbers));

Этот код уже произошел. Вам нужно, чтобы это произошло сейчас, чтобы получить текущее значение ...

0 голосов
/ 21 февраля 2020

Не изменяется, потому что вы никогда не обновите значение end внутри l oop:

const numbers = [0, 1, 0, 2, 3, 5, 0, 10, 88];

function moveZeros(arr) {
  const lastIndex = arr.length - 1;
  let j = 0;
  let end = arr[lastIndex - j];

  for (let item of arr) {
    end = arr[lastIndex - j]; // Changes value of end
    console.log(end); // odd behavior 
    console.log(j++); // behaves as expected 
  }
  console.log(end) // odd behavior
}
console.log(moveZeros(numbers));
...