Понимание для петли в в JavaScript - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь понять циклы полностью.Я провел свое исследование и немного понял.

Я знаю такие циклы, как

for(var i = 0; i < 5; i++) { console.log(i) }

Это означает, что продолжать увеличивать i, начиная с 0, так как лог как i меньше5

Я также знаю такие циклы, как

var a = [];
a[5] = 5;
for (var x in a) {
    console.log(x);
}

Что означает цикл для x в a и будет записывать 5;

Искал игру вокруг исследования, а затем я вижучто-то вроде

function aNumber() {
  var aInt = 521;
  var intString = aInt.toString();
  var intLength = intString.length;
  var result = 0;
  for (var i in intString) {
    result += Math.pow((+intString[i]), intLength);
  }
  console.log(result);
  //...	

}

aNumber();

Я понимаю преобразование int в string.Но петля для меня нова.Я знаю, что функция Math.pow() делает так, как она принимает параметры (Math.pow (2,2) совпадает с 2 ** 2) и + в +intString передает string как intЧто я на самом деле не понимаю, так это вот эта часть

result += Math.pow((+intString[i]), intLength);

Это заставляет целое loop выглядеть запутанным.

Может кто-нибудь помочь мне объяснить это в простых терминах, как я объяснилдругие?Спасибо

1 Ответ

0 голосов
/ 17 октября 2018
Циклы

for..in перебирают перечисляемые имена свойств объекта (включая свойства, унаследованные от прототипа).Поскольку перечисляемые свойства строк всегда являются их числовыми указателями и ничем иным, строка:

for (var i in intString)

может быть заменена на

for (let i = 0; i < intString.length; i++)

, оставляя остальной код тем же, ион будет работать одинаково.Выражение intString[i] относится только к текущему итерируемому символу.

Но я бы не советовал использовать циклы for..in в большинстве случаев - это не сложно спутать с for..of (что совсем не так)), и методы массива часто приятнее работать.Например, код, который генерирует result в вашем коде, может быть заменен использованием Array.prototype.reduce, который может генерировать result сразу, без переназначения:

const intString = '521';
const intLength = intString.length;
const result = Array.prototype.reduce.call(
  intString,
  (a, intChar) => a + (intChar ** intLength),
  0 // initial value of accumulator a
);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...