Javascript:字典数组,从一个有条件的dictionairy中获取所有键值对

时间:2017-03-16 13:30:56

标签: javascript arrays dictionary d3.js

首先,这是我在这里的第一篇文章,我不是一个非常高级的程序员。如果我不遵守Stackoferflow的规则,请告诉我。

我正在尝试使用D3为我的链接视图分配制作散点图(和数据图)。在我的x轴上,我将有几年,在Y轴上,我想要某个国家的预期寿命。该国家/地区将成为变量并传递到创建散点图的函数中(通过单击数据图)。

我的数据集如下所示:

    [{"country":"Abkhazia","1995":null,"1996":null,"1997":null,"1998":null,"1999":null,"2000":null,"2001":null,"2002":null,"2003":null,"2004":null,"2005":null,"2006":null,"2007":null,"2008":null,"2009":null,"2010":null,"2011":null,"2012":null,"2013":null,"2014":null,"2015":null,"2016":null},
     {"country":"Afghanistan","1995":49.4,"1996":49.7,"1997":49.5,"1998":48.6,"1999":50,"2000":50.1,"2001":50.4,"2002":51,"2003":51.4,"2004":51.8,"2005":52,"2006":52.1,"2007":52.4,"2008":52.8,"2009":53.3,"2010":53.6,"2011":54,"2012":54.4,"2013":54.8,"2014":54.9,"2015":53.8,"2016":52.72},
      etc.

我的功能是这样开始的:

function makeScatter(lifeExpectancy, healthPercGDP, country){...

我希望拥有所有键值对的数组或词典或所有值(我认为我可以同时工作)属于传递给我的函数的国家(例如阿富汗)。

提前致谢!

1 个答案:

答案 0 :(得分:1)

鉴于您的数据结构,一种简单的方法就是过滤makeScatter函数内的数据数组。

function makeScatter(country) {
    var filteredData = data.filter(d => d.country === country);
}

这是一个演示,请检查控制台:



var data = [{
  "country": "Abkhazia",
  "1995": null,
  "1996": null,
  "1997": null,
  "1998": null,
  "1999": null,
  "2000": null
}, {
  "country": "Afghanistan",
  "1995": 49.4,
  "1996": 49.7,
  "1997": 49.5,
  "1998": 48.6,
  "1999": 50,
  "2000": 50.1,
  "2001": 50.4
}, {
  "country": "Angola",
  "1995": 59.4,
  "1996": 59.7,
  "1997": 39.5,
  "1998": 58.6,
  "1999": 60,
  "2000": 60.1,
  "2001": 60.4
}];

function makeScatter(country) {
  var filteredData = data.filter(d => d.country === country);
  console.log(filteredData);
}

makeScatter("Afghanistan")




然而,这里存在一个潜在的问题:在D3中,"输入" selection包含与传递给data()函数的数组一样多的元素。现在,这个filteredData数组只有一个对象,这意味着你在输入选择中只有一个元素。

因此,我的建议是这样的:在过滤你的国家之后,在一个对象数组中转换那个巨大的对象(每个对象都有yearexpectancy属性),这里名为{{1} }:

countryData

以下是演示:



function makeScatter(country) {
    var filteredData = data.filter(d => d.country === country);
    countryData = [];
    for (var prop in filteredData[0]) {
        countryData.push({
            year: +prop,
            expect: filteredData[0][prop]
        })
    }
}