【问题标题】:Min and Max values of an array of dictionaries (JSON)字典数组的最小值和最大值 (JSON)
【发布时间】:2017-08-09 02:40:30
【问题描述】:

我无法从数据集中获取最大值和最小值。我认为这个(// Get the largest value from Json object with Javascript 结合 Math.min.apply returns 0 for null)最接近我的需要,但是我的数据有点复杂(至少从我的“初学者的角度来看”)。

我的数据集涉及从 1995 年到 2016 年所有国家/地区的预期寿命,如下所示:

[{"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},
{"country":"Afghanistan","1995":null,"1996":null,"1997":null,"1998":null,"1999":null,"2000":null,"2001":null,"2002":5.7,"2003":6.8,"2004":6.4,"2005":6.6,"2006":6.8,"2007":7.3,"2008":7.0,"2009":7.6,"2010":7.6},
{"country":"Akrotiri and Dhekelia","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},
{"country":"Albania","1995":2.6,"1996":4.0,"1997":4.8,"1998":5.3,"1999":5.8,"2000":6.4,"2001":6.0,"2002":6.3,"2003":6.2,"2004":6.9,"2005":6.8,"2006":6.7,"2007":6.9,"2008":6.7,"2009":6.9,"2010":6.5},
etc.

我需要什么:

完整数据集的最大值和最小值。
例如,这将是:

min: 2.6
max: 7.6

我正在使用 D3 制作数据图,我想使用这些值来创建一系列颜色。

我尝试过的代码

正如介绍中所说,我认为我需要结合上面给出的两个链接,但是我无法使其工作。例如,使用第二个链接,我获得了给定国家/地区的最小值,但不是所有国家/地区的最小值。

希望有人可以帮助我!

【问题讨论】:

  • 请添加想要的结果和代码,你试过了。
  • 一年的最小值和最大值?每年?按国家/地区?
  • 数组的整体结构使其难以使用
  • NinaScholz 和@Weedoze,我的问题这样清楚吗?
  • 你可以得到每个国家的最小/最大值,然后是那些的最小值/最大值。

标签: javascript arrays json dictionary max


【解决方案1】:

您可以遍历所有国家和所有键并检查该值是否不等于null。然后获取minmax 值。

var data = [{ "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 }, { "country": "Afghanistan", "1995": null, "1996": null, "1997": null, "1998": null, "1999": null, "2000": null, "2001": null, "2002": 5.7, "2003": 6.8, "2004": 6.4, "2005": 6.6, "2006": 6.8, "2007": 7.3, "2008": 7.0, "2009": 7.6, "2010": 7.6 }, { "country": "Akrotiri and Dhekelia", "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 }, { "country": "Albania", "1995": 2.6, "1996": 4.0, "1997": 4.8, "1998": 5.3, "1999": 5.8, "2000": 6.4, "2001": 6.0, "2002": 6.3, "2003": 6.2, "2004": 6.9, "2005": 6.8, "2006": 6.7, "2007": 6.9, "2008": 6.7, "2009": 6.9, "2010": 6.5 }],
    min = Number.MAX_VALUE,
    max = -Number.MAX_VALUE;

data.forEach(function (o) {
    Object.keys(o).forEach(function (k) {                
        if (k !== 'country' && o[k] !== null) {
            min = Math.min(min, o[k]);
            max = Math.max(max, o[k]);
        }
    });
});

console.log(min, max);

【讨论】:

    【解决方案2】:

    如果你被允许使用 ES6:

    const maxValue = dataset.reduce( (max, obj)  => {
        let ar = [max];
        for(const key in obj) {
            if (isNaN(Number.parseFloat(obj[key]))) continue;
            ar.push(obj[key]):
        }
        return Math.max.apply(ar, Math);
    }, -1)
    

    【讨论】:

      【解决方案3】:

      我假设您要检查数组的所有元素是否有有效数字,并获取结果数字集的最小值/最大值。这是执行此操作的代码示例。可以点击运行查看结果。

      data = [{"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},
      {"country":"Afghanistan","1995":null,"1996":null,"1997":null,"1998":null,"1999":null,"2000":null,"2001":null,"2002":5.7,"2003":6.8,"2004":6.4,"2005":6.6,"2006":6.8,"2007":7.3,"2008":7.0,"2009":7.6,"2010":7.6},
      {"country":"Akrotiri and Dhekelia","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},
      {"country":"Albania","1995":2.6,"1996":4.0,"1997":4.8,"1998":5.3,"1999":5.8,"2000":6.4,"2001":6.0,"2002":6.3,"2003":6.2,"2004":6.9,"2005":6.8,"2006":6.7,"2007":6.9,"2008":6.7,"2009":6.9,"2010":6.5}];
      
      values = [];
      
      for (i in data) {
        for (j in data[i]) {
          if (parseFloat(data[i][j]) > 0) {
            values.push(parseFloat(data[i][j]));
          }
        }
      }
      
      min = Math.min.apply(null, values);
      max = Math.max.apply(null, values);
      alert(values)
      alert(min);
      alert(max);

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 2023-03-29
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 2017-02-13
        • 2012-02-11
        • 2017-05-30
        相关资源
        最近更新 更多