2016-08-03 13 views
0

配列の配列を順番に循環するループを設計し、各数値を加算し、平均を計算してコンソールに出力することには苦労しています。配列の配列内の各数値セットを追加するにはどうすればよいですか? (JavaScript)

ここは私のコードです。

var data = [ 
 
    [3, 6, 14, 17, 30, 40, 44, 66, 69, 84, 92, 95], 
 
    [100, 17, 26, 28, 29, 34, 38, 59, 78, 82, 84, 93], 
 
    [6, 12, 22, 25, 35, 44, 45, 57, 60, 61, 78, 80], 
 
    [6, 11, 14, 19, 33, 50, 57, 58, 61, 88, 89, 97], 
 
    [6, 13, 23, 28, 39, 44, 50, 55, 58, 72, 80, 88], 
 
    [6, 8, 22, 26, 48, 50, 55, 65, 77, 84, 93, 99] 
 
] 
 

 
var calcTotal, arrayTotal, totalSum; 
 
calcTotal = []; 
 
arrayTotal = []; 
 
totalSum = []; 
 
arrayTotal.push(data[0]) 
 
totalSum = data[0].reduce(function(a, b) { 
 
    return a + b; 
 
}); 
 
calcTotal.push(totalSum) 
 

 

 
console.log(Math.round(totalSum/12))

http://plnkr.co/edit/Ses4XApKEdo2CCZmsis7?p=preview

コンソールへの単一のアレイ内で一緒に加えたときにこれまでのところ、私はそれは私が理想的には、一つだけの結果を表示するために、各アレイからの出力の平均を考え取り組んできました。

私はfor/forEachループで遊んでいましたが、誰かが助けやアドバイスを提供できるのであれば、それを解読することはできませんでしたか?だから、限り、私はあなたが右の各行のコンソール平均に表示する必要が理解し

おかげ

+1

希望の結果はここにありますか? –

+0

'function sum(a、b){戻り値a + b;}平均値= data.map(関数s(戻り値s.reduce(sum、0)/s.length;}); globalAverage = averages.reduce(sum、0)/averages.length; ' - それはおそらく何か? –

答えて

1

それは非常に簡単です:あなたは、二つの機能、addaverageを書く使用することができますArray#mapArray#reduce

var data = [ 
 
    [3, 6, 14, 17, 30, 40, 44, 66, 69, 84, 92, 95], 
 
    [100, 17, 26, 28, 29, 34, 38, 59, 78, 82, 84, 93], 
 
    [6, 12, 22, 25, 35, 44, 45, 57, 60, 61, 78, 80], 
 
    [6, 11, 14, 19, 33, 50, 57, 58, 61, 88, 89, 97], 
 
    [6, 13, 23, 28, 39, 44, 50, 55, 58, 72, 80, 88], 
 
    [6, 8, 22, 26, 48, 50, 55, 65, 77, 84, 93, 99] 
 
]; 
 

 
function add(a, b) { 
 
    return a + b; 
 
} 
 

 
function average(list) { 
 
    return list.reduce(add)/list.length; 
 
} 
 

 
document.body.textContent = data.map(average);

+1

エラーをスローするのではなく、 'average([])'が 'NaN'を返すようにするには、' list.reduce(add、0) 'を考慮してください。 – Oriol

0

あなたがここにフィドル働いている、それだけではforEachでパックするために必要な単一のラインでかなり良い仕事をやった:私はあなたのようにいくつかの追加の変数を抽出しましたhttps://jsfiddle.net/enowacki/dhdc1ztc/2/

const data = [ 
 
    [3, 6, 14, 17, 30, 40, 44, 66, 69, 84, 92, 95], 
 
    [100, 17, 26, 28, 29, 34, 38, 59, 78, 82, 84, 93], 
 
    [6, 12, 22, 25, 35, 44, 45, 57, 60, 61, 78, 80], 
 
    [6, 11, 14, 19, 33, 50, 57, 58, 61, 88, 89, 97], 
 
    [6, 13, 23, 28, 39, 44, 50, 55, 58, 72, 80, 88], 
 
    [6, 8, 22, 26, 48, 50, 55, 65, 77, 84, 93, 99] 
 
]; 
 

 
const result = data.map((arr) => { 
 
    const rowSum = arr.reduce((prev, curr) => prev + curr); 
 
    const rowCount = arr.length; 
 
    const avg = Math.round(rowSum/rowCount); 
 
    
 
    return avg; 
 
}); 
 

 
console.log(result);

を必要がない場合は、何が起こっているのかを明確に見て、それらを省略することができます。

0

フラット化:

var flat = [].concat.apply([], data); 

合計:

var sum = flat.reduce((a, b) => a+b, 0); 
console.log("Avg:" + Math.round(sum/flat.length); 
関連する問題