Учимся зацикливаться на проблеме с картой - PullRequest
1 голос
/ 06 июня 2019

Я следил за онлайн-учебником по ES6 / Typescript и использованию структур Map.

Расположение: https://codecraft.tv/courses/angular/es6-typescript/mapset/

Проблема в том, что из циклов вообще ничего не отображается.Я сравнил то, что написал для этого учебника, и не могу понять, почему он не будет выводить данные в циклы for.

Кто-нибудь, пожалуйста, скажите мне, почему это не работает, когдакод на видео урока показывает, что он делает?

Вот код

function mapDisplay(){
        let ddData = new Map([
          ["this", 11],
          ["doesnt", 21],
          ["work", 31]
        ])
    
        console.log('show ddData');
        console.log(ddData);
    
        console.log('show key');
        // Loop over our Map using keys function
        for (let key of ddData.keys()) {
          console.log(key);
        }
    
        console.log('show values')
        // Loop over our Map using values function
        for (let val of ddData.values()) {
          console.log(val);
        }

        console.log('show entries')
        // Loop over our Map using entries function
        for (let entry of ddData.entries()) {
          console.log(entry[0], entry[1]);
        }
      }
    
      mapDisplay();

Вот что я вижу в консоли вывода:Как вы можете видеть, из контуров не выводится:

enter image description here

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Похоже, вы запускаете свой код в STACKBLITZ и проверяете вывод в его консоли, например https://stackblitz.com/edit/js-n9wnqp., который является просто имитатором консоли JS.

Ваш код совершенно корректен с точки зрения JS и должен работать во всех современных браузерах.

Пожалуйста, проверьте вывод в исходном вопросе, я обновил его.

Метод values ​​() возвращает новый объект Iterator

Вам не нужно преобразовывать итерируемый объект в массив, поскольку

Для... оператора Statement создает цикл, повторяющийся над повторяемыми объектами, включая: встроенные объекты String, Array, Array-like (например, arguments или NodeList), TypedArray, Map, Set и определяемые пользователем итерируемые элементы.

2 голосов
/ 06 июня 2019

Map.values ​​() / Map.keys () возвращает объект Iterator [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values.. Вы должны преобразовать в Array, используя Array.from ().

См. Следующий код -

function mapDisplay(){
    let ddData = new Map([
      ["this", 11],
      ["doesnt", 21],
      ["work", 31]
    ]);

    console.log('show ddData');
    console.log(ddData);

    console.log('show key');
    // Loop over our Map using keys function
    for (let key of Array.from(ddData.keys())) {
      console.log(key);
    }

    console.log('show values')
    // Loop over our Map using values function
    for (let val of Array.from(ddData.values())) {
      console.log(val);
    }

    console.log('show entries')
    // Loop over our Map using entries function
    for (let entry of Array.from(ddData.entries())) {
      console.log(entry[0], entry[1]);
    }
  }

  mapDisplay();
...