Сумма / среднее всех элементов в массиве с использованием цикла for-of
Я прочитал другой вопрос, касающийся цикла for-of, и придумал этот код, вычисляющий среднее и сумму всех элементов в массиве. Кажется, что-то неверно, помощь будет принята.
var i;
elmt=[]
elmt[0] = 0;
elmt[1] = 1;
elmt[2] = 2;
elmt[3] = 3;
elmt[4] = 4;
elmt[5] = 7;
elmt[6] = 8;
elmt[7] = 9;
elmt[8] = 10;
elmt[9] = 11;
var sum = 0;
for (let sum of elmt) {
sum += parseInt( elmt[i], 10 );
}
var avg = sum/elmt.length;
document.write( "The sum of all the elements is: " + sum + " The average is: " + avg );
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Loops</h2>
<p id="demo"></p>
</body>
</html>
Если вы, ребята, знаете другой простой способ сделать то же самое, используя цикл "for-of", не стесняйтесь поделиться.
3 ответа
Вы используете два вида петель. Вы можете выбрать обычный цикл for или цикл for...:
// For loop
for (i = 0; i < elms.length; i++) {
sum += elmt[i];
}
// For...of loop
for (let e of elmt) {
sum += e;
}
Но более чистый способ сделать это с помощью reduce
:
var sum = elms.reduce((a, c) => a + c, 0);
var avg = sum / elms.length;
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Loops</h2>
<p id="demo"></p>
<script>
var i;
elmt=[]
elmt[0] = 0;
elmt[1] = 1;
elmt[2] = 2;
elmt[3] = 3;
elmt[4] = 4;
elmt[5] = 7;
elmt[6] = 8;
elmt[7] = 9;
elmt[8] = 10;
elmt[9] = 11;
var sum = 0;
for (let x of elmt) {
sum += x;
}
var avg = sum/elmt.length;
document.write( "The sum of all the elements is: " + sum + " The average is: " + avg );
</script>
</body>
</html>
Предполагается, что все элементы являются числами, в противном случае вам нужна проверка типов, чтобы игнорировать записи NaN.
Попробуйте следующее
var elmt = [0,1,2,3,4,7,8,9,10,11];
//Using reduce()
function totalReduce(arr) {
if(!Array.isArray(arr)) return;
return arr.reduce((a, v)=>a + v);
}
//Using for loop
function totalForLoop(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0;
for (let i=0,l=arr.length; i<l; i++) {
totalNumber+=arr[i];
}
return totalNumber;
}
// Using while loop
function totalWhile(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0, i=-1;
while (++i < arr.length) {
totalNumber+=arr[i];
}
return totalNumber;
}
// Using array forEach
function totalForEach(arr) {
if(!Array.isArray(arr)) return;
let sum=0;
arr.forEach(each => {
sum+=each;
});
return sum;
};
var sum = totalReduce(elmt);
console.log( "Sum Using reduce: " + sum + " Average: " + sum/elmt.length );
sum = totalForLoop(elmt);
console.log( "Sum Using totalForLoop: " + sum + " Average: " + sum/elmt.length );
sum = totalWhile(elmt);
console.log( "Sum Using totalWhile: " + sum + " Average: " + sum/elmt.length );
sum = totalForEach(elmt);
console.log( "Sum Using totalForEach: " + sum + " Average: " + sum/elmt.length );
Метод redu () выполняет функцию редуктора (которую вы предоставляете) для каждого члена массива, в результате чего получается одно выходное значение.