Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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 使用ES6获取阵列的平均值?_Javascript_Arrays_Function - Fatal编程技术网

Javascript 使用ES6获取阵列的平均值?

Javascript 使用ES6获取阵列的平均值?,javascript,arrays,function,Javascript,Arrays,Function,我一直在尝试通过我创建的函数来获得排名的平均值,如果我通过getAverage()函数传递数组,那么一切都会很好,但当我想从列表数组传递数组时就不会了 const list = [{ name: "Ben", ranking: 3 }, { name: "Harry", ranking: 1 }, { name: "Kim", ranking: 2 }, { name: "John", ranking: 5 }, { name: "Liz", rankin

我一直在尝试通过我创建的函数来获得排名的平均值,如果我通过getAverage()函数传递数组,那么一切都会很好,但当我想从列表数组传递数组时就不会了

const list = [{
  name: "Ben",
  ranking: 3
}, {
  name: "Harry",
  ranking: 1
}, {
  name: "Kim",
  ranking: 2
}, {
  name: "John",
  ranking: 5
}, {
  name: "Liz",
  ranking: 4
}];

//Average of ranking
const getAverage = (arr) => {
const reducer = (total, currentValue) => total + currentValue;
const sum = arr.reduce(reducer);
return sum / arr.length;
}
getAverage();

为什么要将减速机功能与实际减速机分离?此外,.reduce没有初始值,因此我建议:-

const sum=arr.reduce((总计,当前)=>total+=current.ranking,0)


您的功能已关闭。请记住,您正在迭代对象数组,而不是值数组

const getAverage = (arr) => {
  const reducer = (total, currentObj) => total + currentObj.ranking;
  const sum = arr.reduce(reducer, 0);
  return sum / arr.length;
}
// use: 
// console.log(getAverage(list));
编辑
此外,您需要将减速机的起始值初始化为零,否则它会将数字添加到undefined,从而导致NaN。

您从未向函数传递任何内容,因此
arr
将是
undefined
。为什么不想将数据传递给正在调用的函数。如果不传递任何内容,代码将不会执行任何操作。因此正确的代码应该是
getAverage(list)
@parthmanaktalagetaverage(list);返回
+=
运算符的名称?你只是在另一个回答中做了同样的事情。实际上只需要
+
…换句话说,返回两个值的总和。除此之外,您正在将对象添加到数字“为什么要将reducer函数从实际reduce中分离出来?”这不是问题。“此外,.reduce没有初始值,”这是一个潜在的问题,但不是OP所问的问题。这并不能真正回答问题。是的,您可能只需要
+
,但您希望将总和加上当前值就可以了。@user3094755没有任何区别-该值会立即返回,无论如何-这不像是分配给
total
的任务会被使用。试着运行这个…会发现使用OP的输入失败谢谢你的回复!帮了大忙!我完全忘了初始化减速机的起始值。
const getAverage = (arr) => {
  const reducer = (total, currentObj) => total + currentObj.ranking;
  const sum = arr.reduce(reducer, 0);
  return sum / arr.length;
}
// use: 
// console.log(getAverage(list));