繁体   English   中英

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

[英]Javascript add 2 new keys dynamically to new dictionary object or increment if they exist

我正在尝试基于两个数据键值对(我想使用一种分组方法)在javascript中创建字典,我的数据有2个字段:名称((“保留”或“存储”)和一个月名称字段: 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中的两个键...

编辑:为了更准确,我的任务是为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”)中:对于两种数据,我使用了两种不同的格式化方法(内部角度订阅方法) ;))

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;
   }
 }

为了进行计数,可以使用一个对象并使用默认值(如果在该对象中找不到url)。

 var array = ['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/'], count = array.reduce((c, s) => (c[s] = (c[s] || 0) + 1, c), Object.create(null)); console.log(count); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM