Javascript 将 2 个新键动态添加到新字典对象中,或者如果存在则递增

标签 javascript dictionary key

我正在尝试基于两个数据键值对在javascript中创建一个字典(我想用它做一种分组方法) 我的数据有 2 个字段:名称(“reserved”或“storned”)和月份名称字段:somedata = {name: "July", value:"reserved"} 现在,我想将相应的月份添加到一个存储桶中,并为它们对应的每个组(保留的或存储的)增加+1。 如何动态迭代数组中的对象并动态创建一个字典对象,其中键为月份,然后值(或保留的其他字段)并在每次相同的数据对象进入时递增 +1?所以这基本上是按月和值对象分组...

在 Python 中这非常简单:

ist_of_urls = ['http://www.google.fr/', 'http://www.google.fr/', 
                'http://www.google.cn/', 'http://www.google.com/', 
                'http://www.google.fr/', 'http://www.google.fr/', 
                'http://www.google.fr/', 'http://www.google.com/', 
                'http://www.google.fr/', 'http://www.google.com/', 
                'http://www.google.cn/']

urls = [{'url': 'http://www.google.fr/', 'nbr': 1}]

    urls_d = {}
    for url in list_of_urls:
        if not url in urls_d:
            urls_d[url] = 1
        else:
            urls_d[url] += 1

对于一个键 url,但我不知道如何在 javascript 中为 2 个键执行此操作...

编辑:为了更精确,我的任务是为 ngx 图表生成某种数据格式:

{name: "...", series: [{name:"..",value:".."},{...}]}

来自 api 的一些原始数据:

[
{
"Anzahl": 1,
"DemoID": 123456789,
"Monat": "August"
},
{
"Anzahl": 2,
"DemoID": 123456789,
"Monat": "April"
},
{
"Anzahl": 2,
"DemoID": 123456789,
"Monat": "Mai"
}
]

我之前制作了一个 12 个月的数组:

docArray= [
    {name: "Januar", series: []}, {name: "Februar", series: []}, {name: "Maerz", series: []}, {name: "April", series: []},
    {name: "Mai", series: []}, {name: "Juni", series: []}, {name: "Juli", series: []}, {name: "August", series: []},
    {name: "September", series: []}, {name: "Oktober", series: []}, {name: "November", series: []}, {name: "Dezember", series:[]}
  ]

对于堆积条形图,我必须准备数据,使其适合数据模式并将其全部放入一个数组中,(“docArray”):对于两种数据,我使用了两种不同的格式化方法(在 Angular 订阅方法 ;) )

formatStackedBarChartReservierungen(data: any[]){
    for (var dok of data) {
      for (var j = 0; j< this.docArray.length; j++) {
        if (this.docArray[j].name == dok.name){
          var newDok = {name: "Reservierungen", value: dok.value}   ;
          this.docArray[j].series.push(newDok);
        }
      }
    }

    return this.docArray;
  }

  formatStackedBarChartStornierungen(data:any[]){
    for (var dok of data) {
      for (var j = 0; j< this.docArray.length; j++) {
        if (this.docArray[j].name == dok.name){
          var newDok = {name: "Stornierungen", value: dok.value}   ;
          this.docArray[j].series.push(newDok);
        }
      }
    }    
    return this.docArray;
  }

最后,我想要得到这样的东西:

exampleTestData= [{name: "Januar", series: [{name: "Reserviert", value: 2}, {name: "Storniert", value: 8}]},
  {name: "Mai", series: [{name: "Reserviert", value: 5}, {name: "Storniert", value: 3}]} ]    

这种方法对我来说看起来非常乏味,如果数组中有 100 或 1000 个不同的值或未知数怎么办......?

最佳答案

这是 Python 示例的 JS 模拟:

 const urls_d = {};
 for (const url of list_of_urls) {
   if (urls_d[url]) {
     urls_d[url]++;
   } else {
     urls_d[url] = 1;
   }
 }

关于Javascript 将 2 个新键动态添加到新字典对象中,或者如果存在则递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51835381/

相关文章:

javascript - 将 Bootstrap Datepicker 时间戳解析为 Joda DateTime

javascript - Kendo DropDownList 触发器更改给出 "n is not a function"

javascript - 返回上一页时自动播放音频文件

python - 如何将字典值映射到具有列表值的数据框列

c# - 带锁的字典还是并发字典?

python - 在 Python 中将数据库表加载到嵌套字典中

dart - Flutter 可忽略的唯一键

javascript - angular如何在html中动态附加变量

java - Java 中的嵌套映射或组合键

arrays - yaml中的一个值的多个键