在阅读有关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]
答案 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)