簡體   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