首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用平均函数的array.prototype.map

使用平均函数的array.prototype.map
EN

Stack Overflow用户
提问于 2018-11-12 16:19:29
回答 3查看 1K关注 0票数 0

在阅读了地图上的docs方法之后,我仍然无法让它工作。我试图使用地图来获取array.Please中每一对数字的平均值,以帮助我理解出了什么问题。

代码语言:javascript
复制
function getAverage(num1,num2){return Math.ceil((num1+num2)/2)}; 

function a(input){ var b = input.map(getAverage(num1,num2)); return b; } 

a([1,2,3,4]) //error num1 is not defined
//expected [2,4]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-12 16:30:33

map将一个函数投影到列表/数组的每个元素,它只是将一个函数“映射”到所有项上。

代码语言:javascript
复制
[1, 2, 3].map(function (number) { return number + 1; });
// -> [2, 3, 4]

为此,首先需要在“输入”数组中有一对项,因此如下所示:

代码语言:javascript
复制
var numberPairs = [[1, 2], [3, 4]]

到目前为止,你只有一个数字,但没有对。

转换后,您可以像这样使用map

代码语言:javascript
复制
numberPairs.map(function (pair) {
  return Math.ceil((pair[0] + pair[1]) / 2);
});

这将使:

代码语言:javascript
复制
[2, 4]

结果。

票数 2
EN

Stack Overflow用户

发布于 2018-11-12 16:32:33

你不能用地图来计算平均值。映射将一个函数传递给每个元素,然后返回一个形状相同的数组。情况并非如此,您希望从数组中获得一个值,并且可以使用约简法

代码语言:javascript
复制
// adds two number
const adder = (a,b) => a + b;
// reduces the array adding all numbers and divides 
// by the array length
const getAverage = (arr) => arr.reduce(adder)/arr.length;
 
// outputs 2.5
console.log(getAverage([1,2,3,4])) 

票数 0
EN

Stack Overflow用户

发布于 2018-11-12 16:37:22

您可以使用reduce()而不是map()来聚合数组中每个n值的平均值:

代码语言:javascript
复制
const sum = array => array.reduce((a, b) => a + b, 0)
const getAverage = n => (averages, value, index, array) => index % n === 0
  ? [...averages, Math.ceil(sum(array.slice(index, index + n)) / n)]
  : averages

const result = [1, 2, 3, 4].reduce(getAverage(2), [])
console.log(result)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53266164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档