2017-09-12 15 views
-4

各指標の平均で1つの配列を取得する最も簡単な方法は何なJavaScriptの整数配列を平均化する最も簡単な方法は何ですか?

[100, 43, 76, 95, 62], 
[27, 54, 99, 13, 56], 
[56, 92, 01, 46, 87] 

として複数のアレイを持っている場合か? 私は動的な数の配列を持っていますが、それぞれに6つの項目があります。

(例えば上記の配列の平均が[61, 63, 59, 51, 68]

+2

私たちは、単にコンテキストのうち、問題を述べる記事を阻止し、コミュニティがそれを解決することを期待。あなた自身でそれを解決しようとしたと仮定した場合、あなたがあなたの考えを書いて、あなたが理解できなかったものが役立つかもしれません。間違いなくあなたの投稿への回答が増えます。それまでは、質問は閉会投票/投票投票に投票されます。 – Cerbrus

答えて

3

であなただけ取得する一つのループを必要として行うことができます3つの配列の同じインデックスの要素を計算し、平均を計算します。

var arr1 = [100, 43, 76, 95, 62]; 
 
var arr2 = [27, 54, 99, 13, 56]; 
 
var arr3 = [56, 92, 01, 46, 87]; 
 
var res = []; 
 
for(var i=0; i<arr1.length; i++){ 
 
    var avg = Math.round((arr1[i]+ arr2[i]+ arr3[i])/3) 
 
    res.push(avg); 
 
} 
 

 
console.log(res);

そして、あなたは配列のdymanic数を持っている場合、これは魔法のように動作し、

var data = [[100, 43, 76, 95, 62],[27, 54, 99, 13, 56],[56, 92, 01, 46, 87]]; 
 
var res = [], sum; 
 
for(var i=0; i<data[0].length; i++){ 
 
    sum = 0; 
 
    for(var j=0; j<data.length; j++){ 
 
    sum+= data[j][i]; 
 
    } 
 
    res.push(Math.round(sum/data.length)); 
 
} 
 
console.log(res);

サブアレイの
0

だろうあなたは、次のよう

let arr = [ 
 
    [100, 43, 76, 95, 62], 
 
    [27, 54, 99, 13, 56], 
 
    [56, 92, 01, 46, 87] 
 
    ]; 
 

 
let ans = arr.reduce((a, b) => { 
 
    return a.map((x, i) => x+b[i]); 
 
}).map(a => Math.round(a/arr.length)); 
 

 
console.log(ans);

+0

私の答えを確認してください、それはOPが欲しいものです –

+0

私の答えを編集しました – marvel308

1

Array#map 1、および取得するためにArray#reduceを使用各列の合計。まず、あなたのデータ構造ありえない理想で

const arr = [ 
 
    [100, 43, 76, 95, 62], 
 
    [27, 54, 99, 13, 56], 
 
    [56, 92, 01, 46, 87] 
 
]; 
 

 
const result = arr[0].map((item, index) => 
 
    Math.round(arr.reduce((avg, sArr) => avg + sArr[index], 0)/arr.length) 
 
); 
 

 
console.log(result);

0

:次にサブアレイの数で合計を割ります。第1の行列を「回転させる」ことがあります。

const arr = [ 
    [100, 43, 76, 95, 62], 
    [27, 54, 99, 13, 56], 
    [56, 92, 01, 46, 87] 
]; 

const rotated = arr[0].map((_,i)=> arr.map(row=>row[i])); 

を次に、あなたは簡単に行を合計し、その長さを介してそれらを分けることができます。

const result = rotated.map(
    row => row.reduce((a,b) => a+b ,0)/row.length 
); 
0

あなたは同じインデックスですべての値を合計し、後で計算することができます平均。

var array = [[100, 43, 76, 95, 62], [27, 54, 99, 13, 56], [56, 92, 01, 46, 87]], 
 
    result = array 
 
     .reduce(function (r, a) { 
 
      a.forEach(function (b, i) { 
 
       r[i] = (r[i] || 0) + b; 
 
      }); 
 
      return r; 
 
     }, []) 
 
     .map(function (a, i) { 
 
      return Math.round(a/array.length); 
 
     }); 
 

 
console.log(result);

+0

'Math.floor'?それは正しいとは思わない。 – Cerbrus

+0

@Cerbrusは、より良いラウンドですか? –

+0

さて、戻り値は正しいです。 – Cerbrus

関連する問題