В чем разница между реальным массивом и итератором массива в JS? - PullRequest
1 голос
/ 02 ноября 2019

, если у нас есть: let myArr = [1, 2, 3, 4], и если мы это сделаем: myArr.values ​​();мы получим Array Iterator [1, 2, 3, 4]. Итак, в чем разница между массивом и итератором массива?

Ответы [ 5 ]

2 голосов
/ 02 ноября 2019

У них разные цели и функции:

  • массивы - комнаты, итератор - стражи комнат, позволяющие переходить к следующим комнатам
  • Итератор позволяет перемещаться, например, к следующему () можно назвать
  • Итератор не позволяет получить доступ через индекс, например, итератор [0]

enter image description here

const x = [1, 2, 3];
const iterator = x.values();

console.log(x[1]);    //OK -> 2
console.log(iterator[1]);  //   -> Undefined

console.log(iterator.next()); //OK -> 1
console.log(iterator.next()); //OK -> 2
console.log(iterator.next()); //OK -> 3
console.log(iterator.next()); //OK -> { value: undefined, done: true }
//x.next();         //✗Error: x.next is not a function
0 голосов
/ 02 ноября 2019

Когда вы объявляете массив как let myArr = [1, 2, 3, 4], он возвращает вам объект типа Array. Он имеет все свойства и методы, связанные с типом Array, такие как length, push, pop и т. Д.

array options

С другой стороны, myArr.values() возвращает итератор. Итератор отличается от исходного массива в том смысле, что он не имеет свойств и методов массива. Вместо этого, будучи итератором, он имеет свои собственные методы, такие как next и т. Д., Которые можно использовать для перебора значений.

iterator options

0 голосов
/ 02 ноября 2019

По умолчанию использование arr [Symbol.iterator] вернет функцию values ​​().

reference

0 голосов
/ 02 ноября 2019

Массив - это не то же самое, что итератор, хотя они несколько похожи.

Массив - это набор данных, к которым можно вызывать методы (например, forEach и map)и что вы можете передать другим методам массива (например, concat). Массивы также оказываются итеративными (у них есть метод Symbol.iterator).

С другой стороны, итератор или итератор массива, only предоставляет функциональность для итерации по данным;это не позволяет ничего другого. Вы не можете push итератору, или модифицировать его, или извлечь значения из определенных признаков (без фактической итерации по нему). Все, что вы можете сделать с помощью итератора, это итерация, тогда как с полным массивом вы можете делать много других вещей.

Здесь редко есть вариант использования для вызова Array.prototype.values, потому что возвращаемый им итератор идентиченитератор, который будет использоваться, если вы перебрали обычный массив (с for..of). Например, если у вас есть

let myArr = [1, 2, 3, 4];
const iterator = myArr.values();
for (const value of iterator) {
  console.log(value);
}

Вы можете просто перебирать массив напрямую:

let myArr = [1, 2, 3, 4];
for (const value of myArr) {
  console.log(value);
}
0 голосов
/ 02 ноября 2019

Смотрите здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators

В JavaScript итератор - это объект, который определяет последовательность и, возможно, возвращаемое значение после ее завершения. Более конкретно, итератор - это любой объект, который реализует итератор.

Также хорошее объяснение здесь

https://www.geeksforgeeks.org/javascript-array-values/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...