将array.prototype.map与平均功能一起使用

时间:2018-11-12 16:19:29

标签: javascript arrays

在阅读有关map方法的文档后,我仍然无法使它正常工作。 我正在尝试使用map获取数组中每对数字的平均值。请帮助我理解问题所在。

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]

3 个答案:

答案 0 :(得分:2)

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

[1, 2, 3].map(function (number) { return number + 1; });
// -> [2, 3, 4]

因此,首先您需要在“输入”数组中具有个项目,因此看起来像这样:

var numberPairs = [[1, 2], [3, 4]]

直到现在,您所拥有的只是单个数字,而没有对。

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

numberPairs.map(function (pair) {
  return Math.ceil((pair[0] + pair[1]) / 2);
});

这将给出:

[2, 4]

因此。

答案 1 :(得分:0)

您无法使用地图计算平均值。映射将函数传递给每个元素,然后返回具有相同形状的数组。事实并非如此,您想从数组中获取一个值,然后可以使用the reduce method

// 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])) 

答案 2 :(得分:0)

您可以使用reduce()代替map()来汇总数组中每个n值的平均值:

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)