Рекурсия. Функция вычисляет сумму зарплат всех сотрудников(salary). Не понимаю почему функция складывает только salary и игнорирует name? Объясните код пожалуйста.
let company = {
sales: [
{name: 'John', salary: 1000},
{name: 'Alice', salary: 600 }
],
development: {
sites: [
{name: 'Peter', salary: 2000},
{name: 'Alex', salary: 1800 }
],
internals: [
{name: 'Jack', salary: 1300}
]
}
};
function sumSalaries(department) {
if (Array.isArray(department)) {
return department.reduce((prev, current) => prev + current.salary, 0);
} else {
let sum = 0;
for (let subdep of Object.values(department)) {
sum += sumSalaries(subdep);
}
return sum;
}
}
alert(sumSalaries(company));
JavaScript
токрываешь в шторме и все сразу понятно где ошибки,недочеты даннные функциии, рекурсию даже показывает еще можно запустить посмотреть результат и походить дебагером поссмотреть значение любой переменной на текущей строчки
вкраце код пролазиет оп врему массиву складывает параметр salary и если попадается еще массив то его тоже обходит
но тут уже задолбали спрашиваьт одно и то же про salary - видимо тебе этот код написали где то в другом месте
Как работает код?
Так и в чем собственно вопрос? Ошибок нет, код написан с умом. Работает это следующим образом...
Запрашивается функция, которой в качестве аргумента передается объект.
По завершении цикла for...of в конце концов будет возвращено значение sum.
Запрашивается функция, которой в качестве аргумента передается объект.
alert(sumSalaries(company));
Запускается проверка полученного аргумента на массив или не массив... объект массивом не является, поэтому сразу же обрабатывается else. if (Array.isArray(department)) {...}
Внутри else создается переменная с нулевым значением и запускается for...of цикл, который в качестве переменной будет получать все значения в полученном ранее объекте. let sum = 0;
for (let subdep of Object.values(department)) {
sum += sumSalaries(subdep);
}
Внутри цикла на каждой итерации будет вызвана эта же функция, которой в качестве аргумента передается массив... и, следовательно, сработает первое условие... при соблюдении которого используется метод reduce, технически являющийся циклом и проходящий по всему полученному массиву и собирающий числа из salary... department.reduce((prev, current) => prev + current.salary, 0);
Полученное число в конце итерации возвращается и прибавляется к переменной sum... следующая итерация не начнется, пока не будет завершена предыдущая, включая возврат значения от функции.По завершении цикла for...of в конце концов будет возвращено значение sum.
Денис __
Код рабочий и написан с умом, так как его писал не я, я хотел понять как он работает. Основной вопрос в этом коде для меня, это почему name игнорируется, и собирается только salary? Ведь в основном цикле просто собираются все поля, и name, и salary
Денис __
Сейчас попробую переписать сам, прогуглю reduce и Object.values, может станет понятнее

вкраце код пролазиет оп врему массиву складывает параметр salary и если попадается еще массив то его тоже обходит
но тут уже задолбали спрашиваьт одно и то же про salary - видимо тебе этот код написали где то в другом месте
Денис __
Этот код взят с learnjs из статьи про рекурсию
Вот тебе программистская мудрост
Не задумывался почему код работает. Он может перестать работать
Для подсчета общей суммы имена не нужны
Денис __
Ну вот мне как раз и непонятно, как работает пропуск имен
Дуров вкурсе как взломать только вконтакте
Похожие вопросы
- Гляньте код пожалуйста? Он работает, но мне кажется так не пишут. Да и по default что то не хочет работать код.
- Проверьте 2 кода ((( пожалуйста и ткните носом на ошибку. В общем 1 код работает частично, а второй вообще не работает. JS
- Посмотрите пожалуйста задание. Всё работает. Тем не менее, интересно услышать замечания по коду.
- Кто сможет объяснить мне как работает этот код
- Не могу понять почему код на js не работает.
- Почему таккой код не работает?
- Как работают операции "Или" (дизъюнкция), которые в коде пишутся как "||" "&&"?
- Помогите разобраться в логике кода (замыкания)
- Вопрос по стилю кода. Следует ли проверять наличие свойства в объекте если я точно знаю что оно должно там быть?
- Как можно улучшить код?