Вложенный массив Javascript сглаживается с помощью Iterator, hasnext и следующей реализации - PullRequest
0 голосов
/ 27 февраля 2019

** Пытаясь реализовать класс, у которого есть два следующих метода и hasNext, я смог найти аналогичную реализацию в C ++ и Java, но не в Javascript.

1 Ответ

0 голосов
/ 27 февраля 2019

Этот подход сначала создает массив, а затем зацикливает его на плоском массиве.

class NestedIterator {
  constructor(list) {
    this.list = [];

    let flat = (arr, index) => {
      if (index === arr.length) return;
      
      if (Array.isArray(arr[index])) flat(arr[index], 0);
      else this.list.push(arr[index]);
      
      flat(arr, ++index);
    }

    this.index = 0;
    flat(list, 0);
    this.length = this.list.length;
  }

  hasNext() {
    return this.index < this.length;
  }

  next() {
    if (this.hasNext()) return this.list[this.index++];
    else return null; // maybe an error.
  }
}

var list;
var iterator;

/* Should print
 * 2
 * 4
 * 6
 */
list = [2, [4, [6]]];
iterator = new NestedIterator(list);
while (iterator.hasNext()) {
  console.log(iterator.next());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...