Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.07.2017, 09:32
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Функция, которая возвращает сумму всех чисел, переданных в качестве аргументов
Задачка:
Напишите функцию, которая возвращает сумму всех чисел, переданных в качестве аргументов, число которых не ограничено. Функция работает только с числами (включая строковые). Если какой-то из параметров - массив, то к сумме добавляется также сумма значений этого массива (если какое-либо из значений этого массива также является массивом, то к результату добавляется также и сумма его значений, и так далее).

var sum = getSum(1, '1', 'one', [2, '2', 'two']);
console.log( sum ); // 6


мне надо,чтоб у меня вывелась сумму всех чисел,переданных через аргумент. Т.е. в данном случае должно быть 6. Но мне выводит 11(количество всех аргументов).

Мой JS
function getSum () {
	var result=0;

	for (var i = 0; i < arguments.length; i++) {


		if(arguments.length instanceof Array){

  			for (var i = 0; i < arguments.length; i++){

  				result +=(arguments[i]=(!isNaN(+arguments[i]))?+arguments[i]:0);}

  			}else if(!isNaN(+arguments[i])){

					result +=arguments[i];

  			}else{

				continue;

  			}

	};

	return result;
};

var sum = getSum(1, '1', 'one', [2, '2', 'two']);
console.log( sum ); // 6


Помогите разобраться пожалуйста.


А еще как можно реализовать вот это "если какое-либо из значений этого массива также является массивом, то к результату добавляется также и сумма его значений, и так далее"?
Ответить с цитированием
  #2 (permalink)  
Старый 26.07.2017, 10:34
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

классика
function sum(...args) {
  const [head,...tail] = args
  if (Array.isArray(head)) {
    return sum(...head.concat(tail))
  } else {
    return tail.length > 0
      ? sum(...tail) + Number(head)
      : Number(head)
  }
}


alert(sum(1,2,3,['4',[5,'6',[7]]])) // 28


p.s.: кейсы вида 'one' не обрабатывал

UPD: обновил имена переменных в соответствии с терминологией рекурсивного программирования
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 26.07.2017 в 10:42.
Ответить с цитированием
  #3 (permalink)  
Старый 26.07.2017, 11:23
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Tanya51,
Немного исправленный ваш код

function getSum () {
	var result=0;

	for (var i = 0; i < arguments.length; i++) {


		if(arguments[i] instanceof Array){

  			for (var j = 0; j < arguments[i].length; j++){

  				result +=(arguments[i][j]=(!isNaN(+arguments[i][j]))?+arguments[i][j]:0);
                        }

  		}else if(!isNaN(+arguments[i])){

					result += +arguments[i];

  			}else{

				continue;

  			}
               
	};

	return result;
};

var sum = getSum(1, '1', 'one', [2, '2', 'two']);
alert( sum ); //
6
Ответить с цитированием
  #4 (permalink)  
Старый 26.07.2017, 11:52
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 26.07.2017, 13:13
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Tanya51,
ваш код в рекурсивном виде
function getSum () {
	var result=0;

	for (var i = 0; i < arguments.length; i++) {


		if(arguments[i] instanceof Array){

  			for (var j = 0; j < arguments[i].length; j++){

  				result += getSum (arguments[i][j]);

                        }

  		}else if(!isNaN(+arguments[i])){

					result += +arguments[i];

  			}else{

				continue;

  			}
               
	};

	return result;
};

var sum = getSum(1, '1', 'one', [2,[ '2', 'two']]);
alert( sum ); //
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найдите сумму четных чисел из массива yaparoff Общие вопросы Javascript 3 18.01.2017 09:37
Динамическое создание iframe в Firefox mrbean11 Firefox/Mozilla 8 02.11.2012 21:23