【问题标题】:How to print out the entries of a Map into an html document如何将地图的条目打印到 html 文档中
【发布时间】:2017-10-05 14:40:31
【问题描述】:

您好,我有以下代码:

function showsaveobj(){
let patient = creatobj();
let befaktoren = patient.addfaktoren();
console.log(befaktoren);



let show = document.getElementById("show");

show.innerHTML = "Vorname: " + patient.vorname + "<br>Nachname: " + patient.nachname + "<br>" + (function() {for (let entry of befaktoren.entries()){return entry}})();

};   

当我在 html 文档中按保存时,将调用最后一个函数。它创建一个带有姓氏和姓氏的对象,并且它有一个方法可以根据用户在表单中输入的值创建一个映射。该表格有 24 个值对应于一天中的 24 小时。所以地图有 24 个条目。如上所示,我想将这些条目打印到 html 文档中。它适用于名称和姓氏,但是当我使用 for..of 循环编写单个条目时,它只打印出地图的第一个条目。 当我添加

for (let x of befaktoren.entries()){console.log(x);}

控制台向我显示了 24 个数组,其中包含键和值。当我使用 innerHtml 在字符串中执行相同操作时,它只会将地图的第一个数组写入文档。
我在这里做错了什么,但我不知道是什么。在网上搜索了几天后,我希望这里有人可以帮助我。
提前致谢

【问题讨论】:

    标签: javascript hashmap


    【解决方案1】:

    我认为您误解了Map.entries() 方法。 entries() 不返回可以使用 for 循环遍历的 iterable 对象,而是返回包含所有条目的 Iterator,然后您可以使用 next() 方法检索这些条目。

    见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators

    Map 本身就是 iterable,因此您可以在地图本身上使用 for 循环。 尽管如此

    你的代码:

    someString + (function() {
      for (let entry of befaktoren.entries()) {
        return entry
      }
    })()
    

    将始终只将第一个元素放入您的字符串中。

    改为这样做:

    var befaktorenFormatter = function(input) {
      let formattedString;
      // directly iterate over the input iterable
      for (let entry of input) {
        formattedString += entry;
      }
      // don't return the current entry, return the fully formatted string instead
      return formattedString;
    }
    
    show.innerHTML = "Vorname: " + patient.vorname + "<br>Nachname: " + patient.nachname + "<br>" + befaktorenFormatter(befaktoren);
    

    Map 具有方便的方法forEach 用于迭代其内容。 另请参阅:http://devdocs.io/javascript/global_objects/map/foreach。 除了使用for 循环,您还可以执行以下操作:

    let befaktoren = new Map([['foo', 'bar'], ['bar', 'foo']]);
    
    let befaktorenFormatter = function(input) {
      let formattedString;
      input.forEach(function(value, key) {
        formattedString += `${key}: ${value}<br>`;
      });
      return formattedString;
    };
    
    show.innerHTML = "Vorname: " + patient.vorname + "<br>Nachname: " + patient.nachname + "<br>" + befaktorenFormatter(befaktoren);
    

    希望对你有所帮助。

    【讨论】:

    • 嘿伙计,谢谢它帮了大忙。我仍然不明白的是,如果为 (let x of befaktoren.entries()){console.log(x);} 编写它将所有条目记录为单个数组。此外,当我为 (let x of befaktoren.entries()){document.write(x);} 编写时,js 会将所有条目写入 html。那么为什么 for 循环不能与 innerHTML 一起使用,
    • 为了证明我理解你写的内容,“let formattedString”需要分配一个空字符串,否则返回字符串的第一个元素将是未定义的。再次非常感谢您。如果没有您的帮助,我将无法解决这个问题。
    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多