Функция, выводящая в консоль сразу всех мяукающих котов

Дождитесь списка, запустите распознавание всех животных параллельно через Promise.all, затем выберите только type === cat и voice === meow. В данных таких животных пять.

Короткий ответ

Что ответить на собеседовании

Дождитесь списка, запустите распознавание всех животных параллельно через Promise.all, затем выберите только type === cat и voice === meow. В данных таких животных пять.

Подробный разбор

Ответ с пояснениями

Условие

В отеле для животных принимаются только кошки и собаки. В этот день их количество одинаково – по 5 штук. Однако все кошки почему‑то мяукают. Функция fetchAnimals() имитирует получение списка всех животных и возвращает его с задержкой в одну секунду. Функция animalRecognizer() после небольшой паузы определяет тип животного и добавляет его в объект. Требуется реализовать функцию, которая после получения данных сразу выведет в консоль только те записи, где животное – кошка и её голос – мяуканье.

const ANIMAL_TYPE = {
  CAT: 'cat',
  DOG: 'dog',
};

const ANIMAL_VOICE = {
  MEOW: 'meow',
  WOOF: 'woof',
};

const TIMEOUT = {
  1000: 1000,
  75: 75,
};

class DataItem {
  constructor(name, voice) {
    this.name = name;
    this.voice = voice;
  }

  makeSound() {
    if (this.type) {
      console.log(this.name, '-', this.voice);
    } else {
      console.log('Ooops');
    }
  }
}

const ANIMALS_TYPE = {
  Molly: ANIMAL_TYPE.CAT,
  Felix: ANIMAL_TYPE.DOG,
  Smudge: ANIMAL_TYPE.CAT,
  Sooty: ANIMAL_TYPE.CAT,
  Tigger: ANIMAL_TYPE.CAT,
  Charlie: ANIMAL_TYPE.DOG,
  Alfie: ANIMAL_TYPE.CAT,
  Oscar: ANIMAL_TYPE.DOG,
  Millie: ANIMAL_TYPE.DOG,
  Misty: ANIMAL_TYPE.CAT,
};

const DATA = [
  new DataItem('Molly', ANIMAL_VOICE.MEOW),
  new DataItem('Felix', ANIMAL_VOICE.WOOF),
  new DataItem('Smudge', ANIMAL_VOICE.MEOW),
  new DataItem('Sooty', ANIMAL_VOICE.WOOF),
  new DataItem('Tigger', ANIMAL_VOICE.MEOW),
  new DataItem('Charlie', ANIMAL_VOICE.WOOF),
  new DataItem('Alfie', ANIMAL_VOICE.MEOW),
  new DataItem('Oscar', ANIMAL_VOICE.WOOF),
  new DataItem('Millie', ANIMAL_VOICE.WOOF),
  new DataItem('Misty', ANIMAL_VOICE.MEOW),
];

function fetchAnimals() {
  return new Promise(resolve => {
    setTimeout(resolve, TIMEOUT[1000], DATA);
  });
}

function animalRecognizer(dataItem) {
  const animalWithType = Object.create(dataItem);

  animalWithType.type = ANIMALS_TYPE[dataItem.name];

  return new Promise(resolve => {
    setTimeout(resolve, TIMEOUT[75], animalWithType);
  });
}

// Здесь необходимо реализовать функцию, которая получит список животных, распознает их типы и сразу выведет в консоль только мяукающих котов.

Ответ

Дождитесь списка, запустите распознавание всех животных параллельно через Promise.all, затем выберите только type === cat и voice === meow. В данных таких животных пять.

async function printMeowingCats() {
  const animals = await fetchAnimals();
  const recognized = await Promise.all(animals.map(animalRecognizer));
  for (const animal of recognized) {
    if (animal.type === ANIMAL_TYPE.CAT && animal.voice === ANIMAL_VOICE.MEOW) {
      animal.makeSound();
    }
  }
}

Будут Molly, Smudge, Tigger, Alfie и Misty. Ориентируйтесь на данные: в ANIMALS_TYPE шесть кошек, но Sooty имеет голос woof, поэтому утверждение «все кошки мяукают» неверно. Object.create наследует name, voice и makeSound от исходного экземпляра. Общая задержка примерно 1000 + 75 мс, а не 1000 + 10 × 75; ошибки обработайте у возвращённого Promise.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее