Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача по JavaScript. Тема: Многомерные массивы

NK163 Ученик (192), на голосовании 1 год назад
Задача:
 let arr = [[1, 2, 3, [4, 5, [6, 7]]], [8, [9, 10]]];  

Вручную, без цикла, найдите сумму элементов этого массива.
Сделал так:
 let arr = [[1, 2, 3, [4, 5, [6, 7]]], [8, [9, 10]]]; 
let sum = arr[0][0] + arr[0][1] + arr[0][2] + arr[0][3][0] +
arr[0][3][1] + arr[0][3][2][0] + arr[0][3][2][1] +
arr[0][4][0] + arr[0][4][1][0] + arr[0][4][1][1]
console.log(sum)
Выводит ошибку: Uncaught TypeError: Cannot read properties of undefined (reading '0')
Понял, что ошибка связана с arr[0][4][0], но так и не понял как это исправить.
Подскажите, какое решение у этой задачи (без циклов) и в чём моя ошибка - что я сделал не так?
Дополнен 1 год назад
Без функций и методов
Дополнен 1 год назад
Быдло, не умеющее общаться нормально, без оскорблений и матов - мимо
Дополнен 1 год назад
Задача решена самостоятельна. Вопрос закрыт
Дополнен 1 год назад
Оказывается, внутри основного массива было два массива, а не один. Обращаясь к arr[0][4][0], я обращался к чётвертому элементу в первом массиве, которого в принципе и нет. Вместо этого я написал arr[1][0] и код стал рабочим. В общем, невнимательно просмотрел, где стоят все квадратные скобки
Голосование за лучший ответ
AaacoB Aaac Мудрец (14204) 1 год назад
подсказывать барану, который банит ответы? ! идиотов нет!... а ты есть!
NK163Ученик (192) 1 год назад
С мамой своей будешь так общаться, быдло.
NK163, пометка безобидных ответов "бесполезными" делает тебя быдлом. Никто не обязан тебе здесь помогать. Если ответ тебе кажется коротким, то можно попросить ответить более развёрнуто. Дружелюбнее надо к людям и вам ответят тем же. Я часто даже не трачу время на людей у которых в комментариях нет активности. Это говорит о том что человеку тема не достаточно интересна и он ожидает сухой ответ, который можно скопировать.
Максим Искусственный Интеллект (213327) 1 год назад
Ну так логично. Элемента 0,4 не существует. Там только элементы 0-3.
Ты наверное пропустил arr[1].
Celtic Hammer Мудрец (16454) 1 год назад
Если даже без цикла - так как у тебя никто не делает. Раз нельзя циклом - делают рекурсией. На JS сейчас с этим сейчас возиться не буду, но покажу, так и быть, алгоритмы распаковки глубоких многомерных массивов и нахождения их общей суммы на Python
 # распаковка многомерного маcсива рекурсией 
arr = [[1, 2, 3, [4, 5, [6, 7]]], [8, [9, 10]]]
result = []


def unpack_array(x):
global result
for i in x:
if not isinstance(i,list):
result += [i]
else:
unpack_array(i)
return result

# сумма массива рекурсией
s = 0
list_ = unpack_array(arr)

def get_rec_sum(x, i=0):
global s
s += x[i]
if i == len(x) - 1:
return s
return get_rec_sum(x, i + 1)


print(get_rec_sum(list_))
55
NK163Ученик (192) 1 год назад
Спасибо, но я учу JS по учебнику и там первое задание в теме Многомерных массивов было именно вручную найти сумму элементов. Я уже решил это задание самостоятельно - оказывается, внутри основного массива было два массива, а не один. Обращаясь к arr[0][4][0], я обращался к чётвертому элементу в первом массиве, которого в принципе и нет. Вместо этого я написал arr[1][0] и код стал рабочим. В общем, невнимательно просмотрел, где стоят все квадратные скобки. Но за этот вариант тоже спасибо!
Саня Семенов Оракул (60497) 1 год назад
массивы перебирать надо циклами это ыстрее, жрет меньше памяти, позволяет написать красивый код.
Raспояс Обелискович Оракул (70877) 1 год назад
 let arr = [[1, 2, 3, [4, 5, [6, 7]]], [8, [9, 10]]]; 

let sum = 0;

// Обработка первого элемента arr[0]
sum += arr[0][0]; // 1
sum += arr[0][1]; // 2
sum += arr[0][2]; // 3

// Обработка вложенного массива arr[0][3]
sum += arr[0][3][0]; // 4
sum += arr[0][3][1]; // 5

// Обработка вложенного массива arr[0][3][2]
sum += arr[0][3][2][0]; // 6
sum += arr[0][3][2][1]; // 7

// Обработка второго элемента arr[1]
sum += arr[1][0]; // 8

// Обработка вложенного массива arr[1][1]
sum += arr[1][1][0]; // 9
sum += arr[1][1][1]; // 10

console.log(sum); // Выводит 55
Похожие вопросы