数组中对象属性的总和

时间:2015-01-10 18:40:26

标签: javascript for-loop

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

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;
};

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

但我可以开始工作的是:

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;
};

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

PS 我正在尝试自己做这件事,我不是在找人为我做这个问题,我真的很感激一些关于修复或某些问题的提示概念我需要研究了解如何解决这个问题。

谢谢!

4 个答案:

答案 0 :(得分:25)

考虑使用mapreduce

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

或者只是{@ 1}} @KooiInc指出:

reduce

一个工作示例:

&#13;
&#13;
arrayPeople.reduce(function (a,b) { return a + b.age; }, 0) / arrayPeople.length;
&#13;
&#13;
&#13;

答案 1 :(得分: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)
);

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

还会在此行中将,更改为;

for (var i = 0, i < array.length; i++) {

for (var i = 0; i < array.length; i++) {

答案 2 :(得分:2)

您应该将for更改为:

for(var i = 0; i&lt; array.length; i ++)而不是for(var i = 0,i&lt; array.length; i ++)

并给出年龄的初始值

var age=0

答案 3 :(得分:2)

总是一个单行。

arrayPeople.reduce((a, o, i, p) => a + o.age / p.length, 0));

&#13;
&#13;
console.log(`${[{
    name: 'joe',
    job: 'programmer',
    age: 25,
  },
  {
    name: 'bob',
    job: 'plumber',
    age: 30,
  }
].reduce((a, o, i, p) => a + o.age / p.length, 0)}%`);
&#13;
&#13;
&#13;