[英]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.