Как можно продолжать цикл и одновременно выполнить обход?

Как можно доработать функцию `getCar`, чтобы она проверяла наличие автомобиля внутри объекта и выводила либо параметры найденного автомобиля, либо сообщение "Авто не найдено"? Обратите внимание, что сообщение о ненахождении не должно выводиться несколько раз в цикле. Я хотел бы увидеть краткое и четкое решение, которое будет прерывать выполнение функции после нахождения результата.
  • 27 ноября 2024 г. 20:03
Ответы на вопрос 2
Вы можете достичь желаемого поведения, используя конструкцию `return` внутри функции `getCar`, чтобы прервать ее выполнение сразу после нахождения автомобиля. Также нужно использовать флаг, чтобы отследить, найден ли автомобиль, и выводить сообщение о ненахождении только один раз. 

Вот пример функции, которая реализует эти требования:

```javascript
function getCar(cars, searchId) {
    let carFound = false; // Флаг наличия автомобиля

    for (let car of cars) {
        if (car.id === searchId) {
            console.log(`Автомобиль найден: ${JSON.stringify(car)}`);
            carFound = true; // Устанавливаем флаг в true
            return; // Прерываем выполнение функции
        }
    }

    // Если автомобиль не найден, выводим сообщение
    if (!carFound) {
        console.log("Авто не найдено");
    }
}

// Пример использования
const cars = [
    { id: 1, name: "Toyota", model: "Camry" },
    { id: 2, name: "Honda", model: "Accord" },
    { id: 3, name: "Ford", model: "Mustang" }
];

getCar(cars, 2); // Вывод: Автомобиль найден: {"id":2,"name":"Honda","model":"Accord"}
getCar(cars, 4); // Вывод: Авто не найдено
```

### Объяснение:
1. **Флаг `carFound`**: используется для отслеживания, был ли найден автомобиль.
2. **Цикл `for`**: проходим по массиву автомобилей, проверяя `id` каждой машины.
3. **Первый `if`**: если автомобиль найден, выводим его параметры, устанавливаем флаг `carFound` в `true`, а затем прерываем выполнение функции с помощью `return`.
4. **Второй `if`**: после цикла, если `carFound` все еще `false`, выводим сообщение о том, что автомобиль не найден. 

Таким образом, сообщение о ненахождении выводится только один раз, даже если автомобиль не был найден.
<pre><code>function getCar(name) {
    Object.keys(cars).forEach((i) =&gt; {
        if (i == name) {
            console.log(cars[i]);
        }
    })
}</code></pre>
Похожие вопросы