在阅读了地图上的docs方法之后,我仍然无法让它工作。我试图使用地图来获取array.Please中每一对数字的平均值,以帮助我理解出了什么问题。
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]发布于 2018-11-12 16:30:33
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]结果。
发布于 2018-11-12 16:32:33
你不能用地图来计算平均值。映射将一个函数传递给每个元素,然后返回一个形状相同的数组。情况并非如此,您希望从数组中获得一个值,并且可以使用约简法。
// 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]))
发布于 2018-11-12 16:37:22
您可以使用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)
https://stackoverflow.com/questions/53266164
复制相似问题