Почему этот код работает?

Есть код, но я не понимаю почему и как он работает, т.к. в этом месте
if (Array.isArray(department))
метод должен возвращать false, т.к. передается объект(company), а не массив - потому работать это все вообще не должно, т.к. true достигается, когда передан - массив. Что я понимаю не так?
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)) { // случай (1)
    return department.reduce((prev, current) => prev + current.salary, 0); // сумма элементов массива
  } else { // случай (2)
    let sum = 0;
    for (let subdep of Object.values(department)) {
      sum += sumSalaries(subdep); // рекурсивно вызывается для подотделов, суммируя результаты
    }
    return sum;
  }
}

alert(sumSalaries(company)); // 6700
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
Anopeng
@Anopeng
Веб-программист, учу фронт и бек
Всё правильно, метод возвращает false и первой выполняется ветка else, результат возвращается ожидаемый:
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)) {
    console.log('case 1');
    return department.reduce((prev, current) => prev + current.salary, 0);массива
  } else {
    console.log('case 2'); // Выполняется первой
    let sum = 0;
    for (let subdep of Object.values(department)) {
      sum += sumSalaries(subdep);
    }
    return sum;
  }
}

alert(sumSalaries(company)); // 6700 === 6700

62851aa26453a190350750.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы