2017-05-16 111 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; }