2017-05-16 109 views
1

我想转换:转换阵列平均

var ic = [[[123,231,12],[56,43,124]],[[78,152,76],[64,132,200]]] 

到(子阵列中的每个元素都有子阵列的平均值)

var ig = [[[122,122,122],[74,74,74]],[[102,102,102],[132,132,132]]] 

这里是我的代码,平均功能的工作原理,但它不返回正确的新数组:

var color2grey = function (image /* this is the image in color*/) { 

const average = function([a,b,c]) { 
return [((a+b+c)/3), ((a+b+c)/3), ((a+b+c)/3)] 
}; 

return image.map(function(subArray) { 
average(subArray); 
}); 

} 

这就是我得到:

returns- (2) [undefined, undefined] 0 : undefined 1 : undefined length : 2 proto : Array(0) 
+0

你可以尝试添加你所得到的输出,哪些函数返回,以便它可以帮助调试。 –

+0

returns-(2)[未定义,未定义] : 未定义: 未定义 长度 : __proto__ : 阵列(0) – MaxES

回答

1

您可以使用map()方法,使新的阵列和内你可以用reduce()计算每个阵列的平均Array.fill()向AVG值添加到新阵列。

var ic = [[[123,231,12],[56,43,124]],[[78,152,76],[64,132,200]]] 
 

 
var result = ic.map(a => a.map(function(e) { 
 
    var avg = e.reduce((r, e) => r + e)/e.length 
 
    return Array(e.length).fill(parseInt(avg)) 
 
})) 
 

 
console.log(result)

0

您可以映射外阵列,获得最大的内部数组的平均值和地图每个项目的平均值。

var ic = [[[123, 231, 12], [56, 43, 124]], [[78, 152, 76], [64, 132, 200]]], 
 
    ig = ic.map(function (a) { 
 
     return a.map(function (b) { 
 
      var avg = Math.floor(b.reduce(function (a, b) { return a + b; })/b.length); 
 
      return b.map(function() { return avg; }); 
 
     }); 
 
    }); 
 

 
console.log(ig);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

var avg = array => array.reduce((a, b) => a + b)/array.length, 
 
    ic = [[[123, 231, 12], [56, 43, 124]], [[78, 152, 76], [64, 132, 200]]], 
 
    ig = ic.map(a => a.map(b => Array(b.length).fill(Math.floor(avg(b))))); 
 

 
console.log(ig);
.as-console-wrapper { max-height: 100% !important; top: 0; }