簡體   English   中英

D3 v4中的Nest()函數生成帶有$符號的密鑰

[英]Nest() function in D3 v4 generating keys with $ sign

我第一次使用d3.nest()函數來嘗試在d3中繪制一個弦波。 現在,當我嵌套年份和國家/地區時,我看到在國家/地區(如$ AUS)和年份(如1960美元)上都附加了一個“ $”符號。 因此,是否期望我需要以dataByCountryAndyear ['$ AUS']的形式訪問數組?

我讀了這篇文章:

在此d3.js日歷視圖中包含json嗎?

似乎在d3 v4中是預期的行為,但是在這種情況下,我想了解使用密鑰訪問對象的正確方法是什么。


function ready(error, country_data, lfpr_data) {

  // converting strings to numbers where necessary
  lfpr_data.forEach(d => {
        d.year = +d.year
        d.female_lfpr = +d.female_lfpr;
        d.male_lfpr = +d.male_lfpr;
  });

  // nesting by country and year i.e for each country all years beneath it
  var dataByCountryByYear = d3.nest()
      .key(function(d) { return d.country; })
      .key(function(d) { return d.year; })
      .map(lfpr_data); 

  console.log(dataByCountryByYear['$AUS'])

  country_data.features.forEach(each_country => { 
    each_country.properties.years = dataByCountryByYear[each_country.id]
  });
}

我的數據如下所示:

year    country country_name    region  female_lfpr male_lfpr   total_lfpr
1960    ABW Aruba   Latin America & Caribbean   NA  NA  NA
1960    AFG Afghanistan South Asia  NA  NA  NA
1960    AGO Angola  Sub-Saharan Africa  NA  NA  NA
1960    ALB Albania Europe & Central Asia   NA  NA  NA
1960    AND Andorra Europe & Central Asia   NA  NA  NA
1960    ARE United Arab Emirates    Middle East & North Africa  NA  NA  NA
1960    ARG Argentina   Latin America & Caribbean   NA  NA  NA
1960    ARM Armenia Europe & Central Asia   NA  NA  NA
1960    ASM American Samoa  East Asia & Pacific NA  NA  NA
1960    ATG Antigua and Barbuda Latin America & Caribbean   NA  NA  NA

您沒有使用entries ,而...

將嵌套運算符應用於指定的數組,並返回鍵值條目的數組 (強調我的)

相反,您使用的是map

將nest運算符應用於指定的數組,並返回一個嵌套的map (強調我的)

因此, nest的結果不是數組,而是map 這是另一種對象。

話雖如此,您的兩個問題是:

  1. d3.map會自動設置以$符號開頭的鍵,如在D3 源代碼中看到的:

     export var prefix = "$"; 

    但是您不必介意該前綴(更多有關此前綴的信息)。

  2. 由於那是一個地圖,而不是數組,因此您必須使用地圖的方法,例如hasgetset 使用這些方法時,您無需使用美元符號。

這是您的代碼/數據的示例:

 const csv = `year,country,country_name,region,female_lfpr male_lfpr,total_lfpr 1960,ABW,Aruba,Latin America & Caribbean,NA,NA,NA 1960,AFG,Afghanistan,South Asia,NA,NA,NA`; const data = d3.csvParse(csv); const dataByCountryByYear = d3.nest() .key(function(d) { return d.country; }) .key(function(d) { return d.year; }) .map(data); console.log(dataByCountryByYear.has("AFG")) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM