2017-12-07 5 views
-3

配列のhightest値を取得したい( 'y'のみ)、どうすればよいですか?配列のhightest値を取得

私は、私はあなたがdata[0].valuesから最大値yを持つオブジェクトを取得したいと仮定値のように[]に設定し、配列の値のみに[0]

data = [ 
 
    { 
 
     values: [ 
 
     { x:'2017-01', y: 1.2 }, 
 
     { x:'2017-02', y: 1.3 }, 
 
     { x:'2017-03', y: 1.5 }, 
 
     { x:'2017-04', y: 1.6 }, 
 
     { x:'2017-05', y: 1.8 }, 
 
     { x:'2017-06', y: 1.9 }, 
 
     { x:'2017-07', y: 1.5 }, 
 
     { x:'2017-08', y: 1.7 }, 
 
     { x:'2017-09', y: 1.5 }, 
 
     { x:'2017-10', y: 0 } 
 
     ] 
 
    } 
 
    ]; 
 
    
 
    data.forEach(function(d) { 
 
    console.log(Math.max(d.values[0].y)); 
 
    });

+1

。 – Teemu

+2

'values'(またはむしろ' data [0] .values')配列を反復したいときは、 'data'配列を反復しています。 –

+0

Math.maxの仕組みを見てください...比較するのに少なくとも2つの項目が必要です – charlietfl

答えて

3

valuesは1オブジェクト配列の(インデックス0)の性質です。最大値を取得するにはArray#map、およびapplyMath#maxを使用して、すべてのyの値を取得します:のみ `data`配列内の単一のメンバーがあります

var data = [{"values":[{"x":"2017-01","y":1.2},{"x":"2017-02","y":1.3},{"x":"2017-03","y":1.5},{"x":"2017-04","y":1.6},{"x":"2017-05","y":1.8},{"x":"2017-06","y":1.9},{"x":"2017-07","y":1.5},{"x":"2017-08","y":1.7},{"x":"2017-09","y":1.5},{"x":"2017-10","y":0}]}]; 
 
    
 
var result = Math.max.apply(null, data[0].values.map(function(o) { 
 
    return o.y; 
 
})); 
 

 
console.log(result);

5

を取得していますdata自体が1つの要素しか持たない配列であるためです。

あなただけy(1.9)の最大値を取得したい場合は、Math.maxを使用することができますが、最大yを持っているオブジェクト全体を取得したい場合は、あなたが見つけるために再び配列を反復処理する必要がありますオブジェクトはy == 1.9です。

代わりに、あなたは一度値を除いては、各繰り返しでコールバックから戻ら同様Array.prototype.forEachの各要素に対してコールバックを呼び出して、配列を反復処理し、Array.prototype.reduce、次の反復

に引数として渡されるを使用しての両方を行うことができます data[0].values -

data = [ 
 
    { 
 
     values: [ 
 
     { x:'2017-01', y: 1.2 }, 
 
     { x:'2017-02', y: 1.3 }, 
 
     { x:'2017-03', y: 1.5 }, 
 
     { x:'2017-04', y: 1.6 }, 
 
     { x:'2017-05', y: 1.8 }, 
 
     { x:'2017-06', y: 1.9 }, 
 
     { x:'2017-07', y: 1.5 }, 
 
     { x:'2017-08', y: 1.7 }, 
 
     { x:'2017-09', y: 1.5 }, 
 
     { x:'2017-10', y: 0 } 
 
     ] 
 
    } 
 
    ]; 
 
    
 
var max = data[0].values.reduce(function(maxSoFar, current) { 
 
    // If current.y is larger than maxSoFar.y, return current 
 
    // so that it becomes maxSoFar for the next iteration 
 
    return current.y > maxSoFar.y ? current : maxSoFar; 
 
}); 
 

 
console.log(max);