Является ли итерация по javascript map.values ​​() итератором с нулевым завершением плохой идеей? - PullRequest
0 голосов
/ 25 апреля 2020

Я довольно новичок в Javascript и в настоящее время работаю с кучей ошибок linting. В частности, для ясности.

У меня есть карта в формате [int, object], карта получается путем JSON .парсинга некоторых данных с сервера и помещения в карту значения ключа .

Мне нужно перебрать множество объектов. Насколько я понимаю, это: for(item in/of map) {} не является производительным, и использование итератора предпочтительнее.

Когда я получаю итератор для значений моей карты, используя const iterator = map.values();, и тестирую, используя

while(!iterator.done) {
  iterator.next();
}

Я считаю, что это происходит бесконечно, сначала через карту, а затем через 'undefined'.

Мое текущее решение заключается в следующем:

let item;
const iterator = map.values();
while ((item = iterator.next().value) != null) {
 // do stuff with item
}

Это похоже на разумное решение, но я ' я надеюсь на некоторую ясность относительно того, является ли присвоение внутри while l oop, или полагаться на нулевое завершение, плохой идеей в javascript; или если есть более идиоматическое c решение?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы должны проверить значение, возвращаемое next для done свойства.

let result = it.next();
while(!result.done) {
  result = iterator.next();
}
0 голосов
/ 25 апреля 2020

Я думаю, что большинство разработчиков делают:

let value;
Object.keys(obj).forEach((key) => { value = obj[key]; console.log(value)});

Работа с интегралами итераторов немного неуклюжа для такого распространенного варианта использования.

...