2017-06-30 5 views
0

私は、javascript objetで最も近い低い値と最も近い高い値を抽出する必要があります。 私の論理は、objet上で反復して、私の製品の値よりも劣っているすべての値を変数に入れます(次に、最も近い上位の値と上位のすべての値を同じにします)javascriptオブジェクトで最も近い値と下限の両方を見つける方法はありますか?

その例で抽出したいのは、次のように構成されたオブジェクトの最初の値である日付です。 "[オブジェクト]:[[val1、val2]、[val1、val2]]

私の論理は良いこと、そして私のコードに何が間違っているのかを見ることができますか?

var datagrph = $.parseJSON('{"label":"Yo", "fromDate":"2015-06-05", "launchDate":"2016-08-15", "dateValues":[["2014-06-05",1723.76], ["2015-06-29",1523.76], ["2015-12-29",1023.76], ["2017-01-29",523.76], ["2017-02-22",1523.76], ["2017-03-29",523.76], ["2017-04-29",1523.76], ["2017-05-29",23.76], ["2017-06-21",523.76] ]}'); 
var productCour = datagrph.dateValues; 
var launchDate = datagrph.launchDate; 

var val1 = [0]; 

Object.keys(productCour).map(function(objectDate, index) { 
    var value = object[objectDate]; 
    if (value <= launchDate) { 
     val1.push(value); 
    } else if (value > launchDate) { 
     value++; 
    } 
    return val1; 
}); 


alert(val1); 
+0

値は...まだ配列であり、私はそれを得るいけない:あなたの所望の出力は何ですか? –

+0

もっと良い方法は、各値との差を計算し、現在の値との差が最も小さい値を返すことです。 – abhishekkannojia

+0

私のための@Jonaswの値は特定のval1(日付)です、間違っていますか?私の希望する出力は、objectDateより小さいすべての値に対応するval1です。 – Kat

答えて

0

は、単純に現在の日付とlaunchDate間の差を計算し、それに応じて値を設定します。今、最も近い値が含まれている必要があります前と後

var datagrph = $.parseJSON('{"label":"Yo", "fromDate":"2015-06-05", "launchDate":"2016-08-15", "dateValues":[["2014-06-05",1723.76], ["2015-06-29",1523.76], ["2015-12-29",1023.76], ["2017-01-29",523.76], ["2017-02-22",1523.76], ["2017-03-29",523.76], ["2017-04-29",1523.76], ["2017-05-29",23.76], ["2017-06-21",523.76] ]}'); 
var productCour = datagrph.dateValues; 

var launchDate = +new Date(datagrph.launchDate+" T00:00"); 

var before,after,diffmin,diffmax; 

productCour.forEach(function(pair){ 

var current=+(new Date(pair[0]+"T00:00")); 
var difference=launchDate-current; 

if(difference>0){ 
    //launchDate not reached 
    if(!diffmin || diffmin>difference){ 
     //weve got a new before 
     before=pair[1]; 
     diffmin=difference; 
    } 
    }else{ 
    //launchDate already reached 
    if(!diffmax || diffmax<difference){ 
     //weve got a new after 
     after=pair[1]; 
     diffmax=difference; 
    } 
    } 
}); 

を。

before:1023.76 
after: 523.76 

http://jsbin.com/cozovecaha/edit?console

+0

すごく印象深い、ありがとう。私たちは近くにいると思われますが、後の値(ペア[0])の結果は「2017-06-21」である必要があります。「2017-01-29」 – Kat

+0

@katchou ["2017-01-29"、523.76] ... –

+0

私の間違い、そうです。高槻 – Kat

関連する問題