JavaScript - 显示数组的键和值

标签 javascript arrays

我正在使用一个模块对象并尝试创建一种博客(它不会在现实生活中使用 - 只是我学习东西)。 当用户填写表单并提供标签时,它会检查关联数组中是否存在该标签,如果不存在,则添加值 = 1。如果标签已存在,则将值添加 +1。现在我想在一侧显示每个标签有多少个条目,例如:

cooking (3) 运动(1)

它似乎部分起作用,因为当我添加另一个标签时,它会显示,但会不断增加所有类别/标签的数量:

cooking (1) 运动(1)

然后

cooking (2) 运动(2)

...不仅仅是用户刚刚添加的那个。

var myArticles = (function () {
    var s, articles;

    return {

        settings: {
            articleList: "articles", // div with generated articles
            articleClass: "article", // class of an article
            articleIndex: 0,
            sidebar: document.getElementById("sidebar"),
            tagList: {},
            // cats: Object.keys(this.settings.tagList)
        },

        init: function() {
            // kick things off
            s = this.settings;
            articles = document.getElementById(this.settings.articleList);
        this.createArticle();
        },

        createArticle: function() {
            var div = document.createElement("div");
        var getTag = document.getElementById("tag").value;
        var getTitle = document.getElementById("title").value;

        // Add classes
        div.classList.add(this.settings.articleClass, getTag);

        // Add title / content
        var title = document.createElement("h2");
        var textNode = document.createTextNode(getTitle);
        title.appendChild(textNode);
        div.appendChild(title);

        // Add category
        div.innerHTML += "Article" + this.settings.articleIndex;
            articles.appendChild(div);
            this.settings.articleIndex +=1;
        this.updateCategories(getTag);
        },

    updateCategories: function(tag) {
         // Create header
        this.settings.sidebar.innerHTML = "<h3>Categories</h3>";

        // Create keys and count them
        if (tag in this.settings.tagList) {
        this.settings.tagList[tag] += 1;
        } else {
        this.settings.tagList[tag] = 1;
        }

        var cats = Object.keys(this.settings.tagList);

        // Create an unordered list, assign a class to it and append to div="sidebar"
        var ul = document.createElement('ul');
        ul.classList.add("ul-bare");
        this.settings.sidebar.appendChild(ul);

        // iterate over the array and append each element as li
        for (var i=0; i<cats.length; i++){
        var li=document.createElement('li');
        ul.appendChild(li);
        li.innerHTML=cats[i] + "(" + this.settings.tagList[tag] + ")";
        }
    }
    };
}());

和 HTML:

 <body>
    <div id="container">
    <h1>My articles</h1>
    <div id="genArticle" class="left">
      <form id="addArt" method="post">
    <div>
          <label for="title">Title</label>
          <input type="text" id="title" class="forma" placeholder="Title" required />
    </div>
    <div>
          <label for="tag">Tag</label>
          <input type="text" id="tag" class="forma" placeholder="Tag" required />
    </div>
    <div>
          <label for="art">Article</label>
          <textarea id="art" class="forma" required /></textarea>
    </div>
    <input type="button" onclick="myArticles.init()" value="Add Art">
    <input type="reset" value="Reset Form">
    <input type="range" size="2" name="satisfaction" min="1" max="5" value="3">
      </form>
      <div id="articles"></div>

    </div> <!-- end of genArticle -->
    <aside id="sidebar" class="right">
    </aside>
    </div> <!-- end of container -->



  <script src="js/script.js"></script>
  </body>

最佳答案

我认为这行是错误的

li.innerHTML=cats[i] + "("+ this.settings.tagList[tag] + ")";

这是this.settings.tagList[cats[i]]

不是this.settings.tagList[标签]

关于JavaScript - 显示数组的键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049003/

相关文章:

arrays - 根据数组中元素的个数,获取包含元素的数组出现的频率

asp.net - 使用 Javascript 删除 HTML 表格行

javascript - 使用Javascript/JQuery设置Rails `hidden_field_tag`值

c - 从 C 中的文本文件中逐行读取整数并将它们存储在数组中

ios - 如何交换swift数组中的元素?

javascript - 检查数组元素是否存在的安全方法?

c - 在c中的字符串左侧添加空格

javascript - Momentjs 我的格式有什么问题

javascript - jQuery load() 函数 - 无法从动态加载的标题内容中获取高度

javascript - Lodash 从对象数组中获取键值