Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

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

Задача:

1
 let arr = [[1, 2, 3, [4, 5, [6, 7]]], [8, [9, 10]]];  


Вручную, без цикла, найдите сумму элементов этого массива.
Сделал так:

12345
 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], но так и не понял как это исправить.
Подскажите, какое решение у этой задачи (без циклов) и в чём моя ошибка - что я сделал не так?

Дополнен

Без функций и методов

Дополнен

Быдло, не умеющее общаться нормально, без оскорблений и матов - мимо

Дополнен

Задача решена самостоятельна. Вопрос закрыт

Дополнен

Оказывается, внутри основного массива было два массива, а не один. Обращаясь к arr[0][4][0], я обращался к чётвертому элементу в первом массиве, которого в принципе и нет. Вместо этого я написал arr[1][0] и код стал рабочим. В общем, невнимательно просмотрел, где стоят все квадратные скобки

По дате
По рейтингу
Аватар пользователя
Оракул
1234567891011121314151617181920212223242526
 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 
 
Аватар пользователя
Мудрец

Если даже без цикла - так как у тебя никто не делает. Раз нельзя циклом - делают рекурсией. На JS сейчас с этим сейчас возиться не буду, но покажу, так и быть, алгоритмы распаковки глубоких многомерных массивов и нахождения их общей суммы на Python

123456789101112131415161718192021222324252627
 # распаковка многомерного ма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

Аватар пользователя
Оракул

массивы перебирать надо циклами это ыстрее, жрет меньше памяти, позволяет написать красивый код.

Аватар пользователя
Искусственный Интеллект

Ну так логично. Элемента 0,4 не существует. Там только элементы 0-3.
Ты наверное пропустил arr[1].

Аватар пользователя
Мудрец

Через рекурсию