2017-03-17 21 views
2

データセットの最大値と最小値の取得に問題があります。私はこれ(// Get the largest value from Json object with JavascriptMath.min.apply returns 0 for nullを組み合わせたもの)が私の必要とするものに最も近いと思っていますが、私のデータは少し複雑です(少なくとも私の「初心者の視点」から)。 2016年までの1995年から辞書の配列(JSON)の最小値と最大値

すべての国のための私のデータセットの懸念の平均寿命は、と次のようになります。

[{"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を使用してデータマップを作っていると私は色の範囲を作成するための値を使用します。

コードは、私は、しかし、私はそれを動作させることができない、

としては、私は上記の二つのリンクの組み合わせが必要だと思う冒頭で述べてみました。たとえば、第2のリンクを使用すると、特定の国の最小値が得られますが、すべての国の最小値は取得されません。

誰かが私を助けることを願っています!

+4

を望んでいた結果とのコードを追加してください、あなたは試してみました。 –

+3

1年間の最小値と最大値は?毎年?国別に? – Weedoze

+0

アレイの全体的な構造は、それを扱うのが難しくなります – Laazo

答えて

3

あなたはすべての国を反復処理し、すべてのキーを超えると値が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);

0

配列のすべての要素を有効な数値にチェックし、結果の数値の最小値/最大値を取得するとします。これを行うためのコードサンプルを示します。実行をクリックすると結果が表示されます。

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);

1

あなたが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) 
関連する問題