数组中对象属性的总和

Bra*_*don 9 javascript for-loop

我有一个包含属性的数组,例如:

var arrayPeople = [
    {
        name: 'joe',
        job: 'programmer',
        age: 25,
    },
    {
        name: 'bob',
        job: 'plumber',
        age: 30,
    };
];
Run Code Online (Sandbox Code Playgroud)

我想创建一个将返回其平均年龄的函数,这是我目前无法正常工作的函数

var ageAverage = function(array) {
    var age = 0, average;
    for (var i = 0; i < array.length; i++) {
        age += array[i].age;
    }
    average = age / array.length;
    return average;
};
Run Code Online (Sandbox Code Playgroud)

运行此函数时我得到的是非数字

但我能开展的工作是:

var ageAverage = function(array) {
    var age = 0, average;
    for (var i = 0; i < array.length; i++) {
        age = array[0].age;
    }
    average = age / array.length;
    return average;
};
Run Code Online (Sandbox Code Playgroud)

这里的细微差别是我拿走了+ =并且只是使它变为=,并且我带走了变量i的使用并且只给它了数组的第一个索引.所以在这样做时,我知道函数正确地用arrayPeople替换参数数组,但是我的for循环中出现了一些问题,即阻止我变为0和1(arrayPeople的索引).

PS我试图自己做这个,我不是在找人为我做问题,我真的很感激一些关于修复什么的提示或者我需要研究理解如何修复的概念这个问题.

谢谢!!

CD.*_*D.. 27

考虑使用mapreduce:

arrayPeople.
  map(function(item){ return item.age; }).
  reduce(function(a, b){ return a + b; }, 0) / arrayPeople.length;
Run Code Online (Sandbox Code Playgroud)

或者只是reduce@KooiInc指出:

arrayPeople.reduce(function (a,b) { return a + b.age; }, 0) / arrayPeople.length;
Run Code Online (Sandbox Code Playgroud)

一个工作实例:

var arrayPeople = [{
    name: 'joe',
    job: 'programmer',
    age: 25,
  }, {
    name: 'bob',
    job: 'plumber',
    age: 30,
  }],
  average = arrayPeople.reduce(function(a, b) {
    return a + b.age;
  }, 0) / arrayPeople.length;

document.write(average);
Run Code Online (Sandbox Code Playgroud)

  • 你不需要映射部分:`arrayPeople.reduce(function(a,b){return a + + b.age;},0);` (3认同)

Ale*_* T. 5

你需要初始化age变量(var age = 0)

var arrayPeople = [{
  name: 'joe',
  job: 'programmer',
  age: 25,
}, {
    name: 'bob',
    job: 'plumber',
    age: 30,
}];

var ageAverage = function(array) {
  var age = 0,
      average;

  for (var i = 0; i < array.length; i++) {
    age += array[i].age;
  }

  average = age / array.length;
  return average;
};

console.log(
  ageAverage(arrayPeople)
);
Run Code Online (Sandbox Code Playgroud)

在你的变体中,age变量等于undefined,和undefined += number(例如25)返回NaN;

也更改,;这一行

for (var i = 0, i < array.length; i++) {
Run Code Online (Sandbox Code Playgroud)

for (var i = 0; i < array.length; i++) {
Run Code Online (Sandbox Code Playgroud)