我很难在$ .map()周围缠头。我试图在2d数组中找到每列的平均值,但在生成该平均值时忽略值0。
示例:
var numbers = [[2,2,1],
[3,3,2],
[2,0,5],
[2,4,5]]
上述结果将是[2.25,3,3.5]。注意找到索引[1]或2,3,0,4 = 9的平均值是9/3,因为我想忽略0值。
到目前为止,我已经想到了:var mean = numbers.map(function(row, i) {
return numbers.map(function(row) {
return row[i];
});
我相信这会让我得到2d数组的相应列,但是我被卡住了。谢谢你的帮助。我还想调用math.mean()方法。
答案 0 :(得分:1)
你已经非常接近了。您可以结合使用Array.prototype.map和Array.prototype.reduce:
var numbers = [[2,2,1],
[3,3,2],
[2,0,5],
[2,4,5]];
function means(arr) {
return arr[0].map(function(item, index) {
var len = arr.length;
var sum = arr.reduce(function(a, b, i) {
if(b[index] === 0) {
len--;
}
return a + b[index];
}, 0);
return sum / len;
});
}
means(numbers);
答案 1 :(得分:0)
简单明了的香草JS代码:
var numbers = [
[2, 2, 1],
[3, 3, 2],
[2, 0, 5],
[2, 4, 5]
]
var l = numbers[0].length;
var w = numbers.length;
var mean = [];
for (var i = 0; i < l; i++) {
var sum = 0;
var elem = 0;
for (var j = 0; j < w; j++) {
sum += numbers[j][i];
elem = elem + (numbers[j][i] == 0 ? 0 : 1);
}
mean.push(sum / elem);
}
console.log(mean);