数组中对象属性的总和

Sum of object properties within an array

我有一个带有属性的数组,以下面的例子为例:

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

我想创建一个函数来 return 他们的平均年龄,这是我目前不工作

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 循环中出现了一些问题,阻止 i 变为 0 和 1(arrayPeople 的索引)。

P.S. 我正在尝试自己做这件事,我不是在找人帮我解决问题,我真的很感激只是一些关于修复什么的提示,或者我需要研究一个概念以了解如何解决这个问题。

谢谢!!

您需要初始化 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 变量等于 undefined,并且 undefined += number(例如 25)returns NaN

也把这一行的,改成;

来自

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

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

您应该将 for 更改为:

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

并赋予年龄初值

var age=0

考虑使用 mapreduce:

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

或者正如@KooiInc 指出的 reduce

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

一个工作示例:

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

总有一条线。

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

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)}%`);