2017-10-15 160 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

**平均值**是將一組值與數值的和除以數值得到的值。對於集合[1,7,10],平均值爲(1 + 7 + 10)/ 3或18/3或6. **平均值**通常用作均值的同義詞。 **中值**是位於一組值的中點的值。例如,集合[1,7,10]的中值是7,因爲在它上面和下面有相等數量的值。對於具有偶數個值的集合,中位數是最接近中間的兩個值的平均值。因此,對於集合[1,5,7,10],最接近中間的兩個值分別是5和7,因此中位數是6。 –