28 августа 2014

Найти сумму чисел в массиве элементов


Имеется массив элементов:
var arr = ['a', 1, 2, [3, 'b', 4, [5, 6, 'c']], 'd', 7, [8, 9]]; 
Найдите сумму всех чисел, включая вложенные массивы.

Решение:
var valuesArr = ['a', 1, 2, [3, 'b', 4, [5, 6, 'c']], 'd', 7, [8, 9]]; 

function getSum(arr) {
  var len = arr.length, elem, sum = 0;
  for (var i=0; i < len; i++) {
    elem = arr[i];
    switch (typeof(elem)) {
      case 'number':
        sum += elem;
        break;
      case 'object':
        if (elem === undefined) {
          continue;
        }
        sum += getSum(elem);
    }
  }
  return sum;
}
getSum(valuesArr); //45

Здесь мы пробегаемся по массиву, проверяя каждый встретившийся элемент.
Если перед нами число, то мы увеличиваем значение суммы sum на величину этого числа.
Если перед нами объект, то нам нужно убедиться, что это именно массив [], а не объект {}. Делаем мы это здесь, проверяя свойство length, которое у объектов {} не определено - undefined.
Убедившись, что перед нами массив, мы передаем его в функцию getSum(),
что является рекурсивным вызовом этой функции - т. е. функция вызывает саму себя.

1 комментарий:

  1. в строке 12 вместо if (elem === undefined) { нужно if (len === undefined) {....?

    ОтветитьУдалить