Функция, которая возвращает сумму всех чисел, переданных в качестве аргументов
Задачка:
Напишите функцию, которая возвращает сумму всех чисел, переданных в качестве аргументов, число которых не ограничено. Функция работает только с числами (включая строковые). Если какой-то из параметров - массив, то к сумме добавляется также сумма значений этого массива (если какое-либо из значений этого массива также является массивом, то к результату добавляется также и сумма его значений, и так далее). 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 Помогите разобраться пожалуйста. А еще как можно реализовать вот это "если какое-либо из значений этого массива также является массивом, то к результату добавляется также и сумма его значений, и так далее"? |
классика :)
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: обновил имена переменных в соответствии с терминологией рекурсивного программирования |
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 |
спасибо
|
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 ); // |
Часовой пояс GMT +3, время: 18:11. |