2017-10-15 15 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입니다. –