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