2017-10-15 9 views
-3

年齢が中央値より大きいこの配列のすべての人々の平均年齢を返そうとしています値。あなたの配列、一つだけのユーザ(バニー)で年齢のあるこの配列のすべての人の平均年齢を返そうとしています

var data = { users: [{ first_name: "Mikey", last_name: "Mouse", age: 24 
    }, { first_name: "Donald", lastName: "Duck", age: 29 }, { first_name: "Woody", lastName: "Woodpecker", age: null }, { first_name: "Bugs", lastName: "Bunny", age: 32 }] }, 
     sum = 0, 
     count = 0, 
     average; 

    data.users.forEach(function (user) { 
    if (typeof user.age === 'number') { 
     sum += user.age; 
     ++count; 
    } 
}); 

average = sum/count; 

console.log(average); 
+2

驚くばかりです。物事がどのようになるのか教えてください。 – llama

+1

あなたの質問で_question_部分を忘れました... – Xufox

+0

私は平均的なメジアンが返ってきましたが、私は平均以上のすべての年齢層をつかむ必要があります。申し訳ありません..私はまだStackOVの周りに自分の道を勉強しています – flashdev

答えて

0

は平均年齢よりも年上なので、平均はちょうど彼の年齢、32になります。しかし、ここでユーザーの任意のセットのためにそれを行うためのコードであり、あなたの質問にデータ構造が与えられています。

var data = { 
    users: [ 
     { first_name: "Mikey", last_name: "Mouse", age: 24 }, 
     { first_name: "Donald", lastName: "Duck", age: 29 }, 
     { first_name: "Woody", lastName: "Woodpecker", age: null }, 
     { first_name: "Bugs", lastName: "Bunny", age: 32 } 
    ] 
}; 

// first calculate the median 
// see https://stackoverflow.com/questions/25305640/find-median-values-from-array-in-javascript-8-values-or-9-values/39639518#39639518 
function median(arr){ 
    arr = arr.sort(function(a, b){ return a - b; }); 
    var i = arr.length/2; 
    return i % 1 == 0 ? (arr[i - 1] + arr[i])/2 : arr[Math.floor(i)]; 
} 

var med = median(data.users.map(function(d){ return d.age; }).filter(function(d){ return typeof d == "number"; })); 

// now calculate the average of those users whose age is above the median 
var users_above_median = data.users.filter(function(d){ return d.age > med; }); 

function average(arr){ 
    return sum(arr)/arr.length; 
} 
function sum(arr){ 
    return arr.reduce(function(d, i){ return i + d; }); 
} 

var avg = average(users_above_median.map(function(d){ return d.age; })); 

console.log(avg); 
+0

それは完璧に機能しました!私はこの回答をどこで受け入れるのですか? – flashdev

+0

@flashdevあなたの評判が低すぎる場合は、回答を受け入れることはできないかもしれません。 また、上記のコメントで判断すると、「平均」、「平均」、「中央値」という用語について混乱しているようです。 –

+0

** Mean **は、一連の値の合計を数値で除算した値です。集合[1,7,10]の場合、平均は(1 + 7 + 10)/ 3、または18/3、または6です。**平均**は通常、平均の同義語として使用されます。 **中央値**は、一連の値の中間点にある値です。例えば、セット[1、7、10]の中央値は、その上と下に同じ量の値があるため、7です。偶数の値を持つセットの場合、中央値は中央に最も近い2つの値の平均です。したがって、集合[1,5,7,10]の場合、中央に最も近い2つの値は5と7なので、中央値は6です。 –

関連する問題