【问题标题】:Get number of each item in an array using a map使用地图获取数组中每个项目的数量
【发布时间】:2020-07-12 19:02:27
【问题描述】:

我正在尝试获取每个字符串项在数组中出现的次数,并使用 Map 将其打印出来。我基本上是从 firebase 函数中读取数据,但现在,我正在使用一个数组来测试代码以获取每个项目的出现。我从here 尝试了以下代码,但它不起作用,我不知道为什么:

<script>
var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];

var count = new Map();

appVersion.forEach(version=> count.set(count.get(version) + 1));

function show(versions) {
         document.write(versions);
         document.write("<br>");
      }
    count.forEach(show);
</script>

我们将不胜感激任何帮助或建议。

【问题讨论】:

    标签: javascript foreach hashmap


    【解决方案1】:

    也许这有帮助

    var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
    
    let counter = {}
    for (version of appVersion){
        counter[version] = 1 + (counter[version] || 0)
    }
    
    console.log(counter);

    【讨论】:

    • 这确实有帮助,但不幸的是,我严格需要为我的案例使用地图。任何关于这方面的建议真的很有帮助吗?
    【解决方案2】:

    可能你想要这个

    如 cmets 中所述,如果您希望最终对象采用这种格式:{ '5011': 1, '5012': 3, '5021': 2 } 你可以使用reduce

    var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
    
    
    map=new Map
    appVersion.forEach(o=>{
       count=map.get(o)||0
        map.set(o,count+1)
    })
    r=[...map].reduce((acc,curr)=>{
      if (acc.length==0) {acc.push({[curr[0]]:curr[1]})}
      else  {acc[0][curr[0]]=curr[1]}
     return acc
    },[])
    
    console.log(r)

    【讨论】:

    • 这太完美了,非常感谢。这很有帮助。
    • 如果我需要打印值而不看起来像 Json 字符串,我将如何处理?像这样的东西:“5012:3”
    • 你是什么意思?你想让它像字符串一样表示吗?可以举个例子吗
    • 是的,只是简单地表示为一个字符串。 5012: 35021: 2
    • 你想把它们放在一个数组中吗?
    【解决方案3】:

    使用地图:

    let contador = {};
    appVersion.map(x => contador[x] = 1 + (contador[x] || 0));
    console.log(contador);

    【讨论】:

      【解决方案4】:

      见下文

      var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
      
      var count = new Map();
      
      appVersion.map( (version) => count.get( version) != undefined ? count.set( version, count.get( version) + 1 ) : count.set( version, 1 ) );
      
      console.log( [...count].sort() );

      【讨论】:

      • 我如何将输出表示为这样的:类似这样的:{ "5011": 1, "5012": 3, "5021": 2 }
      • 我明白了,但输出仍然是这种格式:[ [ "5011", 1 ], [ "5012", 3 ], [ "5021", 2 ] ] 而我正在寻找这样的东西:{ "5011": 1, "5012": 3, "5021": 2 } 抱歉格式不好,cmets 不允许我格式化它正确
      • 我很抱歉给您带来的麻烦,我自己试过了,但格式卡住了
      猜你喜欢
      • 2021-04-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2020-03-18
      • 1970-01-01
      • 2014-02-16
      • 2021-12-11
      相关资源
      最近更新 更多