在二维数组中,找到每列的平均值,但忽略值0,

时间:2015-11-13 19:45:41

标签: javascript arrays

我很难在$ .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()方法。

2 个答案:

答案 0 :(得分:1)

你已经非常接近了。您可以结合使用Array.prototype.mapArray.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);

Working Fiddle