Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
雄辩的JavaScript,第二版,练习5.3历史预期寿命_Javascript_Arrays_Javascript Objects - Fatal编程技术网

雄辩的JavaScript,第二版,练习5.3历史预期寿命

雄辩的JavaScript,第二版,练习5.3历史预期寿命,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,这个问题要求我们获取一系列对象(每个对象都包含关于一个人的信息),将这些人分组到他们死亡的世纪,然后得出每个世纪一个人的平均寿命 我看过教科书上的解决方案,但我不明白为什么我的解决方案不起作用 我能够为每个世纪生成一个由数组组成的对象,每个数组中的元素是我需要平均的年龄: {16: [47, 40], 17: [40, 66, 45, 42, 63], 18: [41, 34, 28, 51, 67, 63, 45, 6, 43, 68, …], 19: [72, 45, 33, 65,

这个问题要求我们获取一系列对象(每个对象都包含关于一个人的信息),将这些人分组到他们死亡的世纪,然后得出每个世纪一个人的平均寿命

我看过教科书上的解决方案,但我不明白为什么我的解决方案不起作用

我能够为每个世纪生成一个由数组组成的对象,每个数组中的元素是我需要平均的年龄:

{16: [47, 40],
 17: [40, 66, 45, 42, 63],
 18: [41, 34, 28, 51, 67, 63, 45, 6, 43, 68, …],
 19: [72, 45, 33, 65, 41, 73],
 20: [73, 80, 90, 91, 92, 82],
 21: [94]}
它们为我们提供了一个平均函数:

function average(array) {
  function plus(a, b) { return a + b; }
  return array.reduce(plus) / array.length;
}
然后我运行以下代码:

var obj = group(ancestry); //this is the object of arrays from above
for (var century in obj) {
  console.log(century + ": " + average(century));
}
我应该得到这个:

// → 16: 43.5
//   17: 51.2
//   18: 52.8
//   19: 54.8
//   20: 84.7
//   21: 94
相反,我得到了以下错误:

TypeError: undefined is not a function (line 3 in function average) 
 called from line 26
//where line 3 is the third line in the average function
//and line 26 is the "console.log..." line from the last paragraph of code

非常感谢您的帮助

编辑:哦,我以前没有注意到,但是您使用循环,然后对键而不是值进行操作

按如下方式进行循环:

for (var century in obj) {
  console.log(century + ": " + average(obj[century]));
}

仔细阅读函数。reduce函数需要一个回调函数作为第一个参数,该回调函数操作并返回一个可变对象(对象或数组)

从MDN链接本身:

reduce为数组中存在的每个元素执行一次回调函数,不包括数组中的孔,并接收四个参数:初始值(或来自上一次回调调用的值)、当前元素的值、当前索引和正在进行迭代的数组


回调是第一个参数<代码>arr.reduce(回调[,初始值])谢谢@PM77-1。。。这是我的错,我在发帖前把这句话重写了3-4遍,错误地把它作为第二句而不是第一句。谢谢你的链接。这比雄辩的JavaScript文本中定义的更好地描述了函数。