Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сумма чисел многомерного массива. (https://javascript.ru/forum/misc/82907-summa-chisel-mnogomernogo-massiva.html)

Gm5 02.08.2021 11:04

Сумма чисел многомерного массива.
 
Прохожу сейчас многомерность. Решил одно-, двух- и трёхмерный массив, а вот этот не могу! Не пойму вроде и правильно написал, но что-то не так! Помогите разобраться, где я ошибся? Если не затруднит, хотелось бы увидеть для сравнения правильное решение именно через циклы, без методов флет, редьюс и подобных.

<!DOCTYPE HTML>
<html >
<head>
    <meta charset="utf-8">
    <title>Тег IMG</title>
</head>
<body>



<script>
let arr = [
  [1, 2, 3, [4, 5, [6, 7]]],
  [8, [9, 10]]
];
let sum = 0;
for (let i = 0; i < arr.length; i++) {
  sum += arr[i];
  for (let j = 0; j < arr[i].length; j++) {
    sum += arr[i][j];
    for (let k = 0; k < arr[i][j].length; k++) {
      sum += arr[i][j][k];
    }

  }
}
console.log(sum);

</script>
</body>
</html>

ksa 02.08.2021 11:33

Цитата:

Сообщение от Gm5
хотелось бы увидеть для сравнения правильное решение именно через циклы

Как вариант...

const arr = [
  [1, 2, 3, [4, 5, [6, 7]]],
  [8, [9, 10]]
];
alert(sum(arr));

function sum(arr) {
	let s = 0
	for (let i = 0; i < arr.length; i++) {
		if (typeof arr[i] === 'object') {
			s += sum(arr[i])
			continue
		}
		s += arr[i]
	}
	return s
}

Gm5 04.08.2021 08:55

ksa,
Спасибо! ))

voraa 04.08.2021 14:28

В современном JS это делается одной строкой для любых размерностей

let s = arr.flat(Infinity).retuce ((a,v) => a+v, 0);

SuperZen 04.08.2021 15:06

voraa,
Цитата:

Сообщение от Gm5
хотелось бы увидеть для сравнения правильное решение именно через циклы, без методов флет, редьюс и подобных.



Часовой пояс GMT +3, время: 19:38.