2017-09-20 3 views
0

私はそのようなオブジェクトを持っています。以下のために)値 2の平均値を取得し、最新の5つの日付(キー)の場合)オブジェクトのキーを日付として使用して値の平均を取得します

1:彼らの鍵は、タイムスタンプで、値は私の電話番号

var history = { 
    '1505845390000': 295426, 
    '1505757979000': 4115911, 
    '1505677767000': 4033384, 
    '1505675472000': 4033384, 
    '1505591090000': 3943956, 
    '1505502071000': 3848963, 
    '1505499910000': 3848963, 
    '1505499894000': 3848963 
} 

は、私は何をしたいです日付範囲は、値

+3

行うことができますか? –

+0

何をする必要があるか考えてみてください。オブジェクト内のすべてのキーを反復処理する方法が必要です。 Research Object.keysまたはfor ... for。 – BMcV

答えて

1

あなたが最初のケース

var obj = { 
 
    '1505845390000': 295426, 
 
    '1505757979000': 4115911, 
 
    '1505677767000': 4033384, 
 
    '1505675472000': 4033384, 
 
    '1505591090000': 3943956, 
 
    '1505502071000': 3848963, 
 
    '1505499910000': 3848963, 
 
    '1505499894000': 3848963 
 
} 
 

 
let ans = Object.keys(obj).sort(); 
 

 
ans = ans.slice(ans.length-5).reduce((a, b) => a+obj[b], 0); 
 

 
console.log(ans/5);

ために次の操作を行うことができます

第二のケースで、あなたはそれを自分で解決しようとしたことがあり

var obj = { 
 
    '1505845390000': 295426, 
 
    '1505757979000': 4115911, 
 
    '1505677767000': 4033384, 
 
    '1505675472000': 4033384, 
 
    '1505591090000': 3943956, 
 
    '1505502071000': 3848963, 
 
    '1505499910000': 3848963, 
 
    '1505499894000': 3848963 
 
} 
 

 
let start = '1505591090000', end = '1505845390000' 
 
let ans = Object.keys(obj).filter(e => e>=start && e<=end); 
 

 
let result = ans.reduce((a,b) => a+obj[b],0)/ans.length 
 

 
console.log(result);

+0

ああ!私はそれを日付に変換してから注文しようとしてきました。最初にソートすることは決してありませんでした! – K20GH

+0

どのように私は最初と最後の間にフィルタを言うことができますが、値が0より大きい場合のみに適応することができます。私は値がi 0、平均は影響を受けたので、0を無視する必要があります – K20GH

+0

フィルタにその条件を追加します – marvel308

0

の平均は、この答えは、そのキーでオブジェクトをフィルタ処理する方法の良い説明があります:

https://stackoverflow.com/a/38750895/5009210

基本的にObject.keys()を使用してキーの配列を取得し、次にArray.filter()で目的のキーを選択し、次にArray.reduce()を使用して、フィルタリングされたキーに関連する値を持つオブジェクトを再構成します。このように:

Object.keys(history) 
    .filter(someFilterFunction) 
    .reduce((obj, key) => { 
     obj[key] = history[key]; 
    }, {}); 

あなたはこれをしたら、あなたはObject.values()を使用して残りの値を抽出して、単純平均機能(私はあなたが平均平均をしたいと仮定)に渡すことができます。

function meanAverage(valuesToAverage) { 
    //avoid divide by zero 
    if (valuesToAverage.length) { 
     const valueSum = sum(valuesToAverage); 
     return valueSum/valuesToAverage.length; 
    } 
    return 0; 
} 

function sum(valuesToSum) { 
    return valuesToSum.reduce((a, b) => a + b); 
} 
関連する問題