Почему оператор if/else выполняет часть else, даже если условие выполнено

Поэтому я запускаю оператор if/else, чтобы проверить, совпадает ли входное значение с названием фильма, но по какой-то причине, даже если заголовок и значение одинаковы и цикл должен остановиться, он все равно сохраняется. работает и выполняет инструкцию оператора else. Почему это?.

Вот как мой код выглядит на данный момент

import React from 'react'
import styles from '@/styles/movies.module.css'
import Image from 'next/image';


export default function index() {
    const movies = [
        {
            title: 'Batman: the dark knight',
            releaseDate: '27 April 2007',
            rating: 9.8,
            image: "/pic11.jpg"
        },
        {
            title: 'Scrubs',
            releaseDate: '18 April 2012',
            rating: 4.7,
            image: "/pic12.jpg"
        },
        {
            title: 'Ted',
            releaseDate: '16 April 2002',
            rating: 9,
            image: "/pic13.png"
        },
        {
            title: 'Transformers',
            releaseDate: '27 April 2007',
            rating: 8,
            image: "/pic14.jpg"
        },
        {
            title: 'Batman: the dark knight rises',
            releaseDate: '27 April 2007',
            rating: 9.2,
            image: "/pic15.jpg"
        },
    ];
    const func = (arg) => {
        for(let i = 0; i < movies.length; i++){
            if (arg === movies[i].title){
                console.info(movies[i].title)
                console.info(`The movie ${movies[i].title} has been found`)
            } else {
                console.info(`The movie ${arg} has not been found!`)
            }
        }
    }


  return (
    <div className = {styles.fightContainer}>
        <div className = {styles.topStuff}>
            <h1>Movie Fight!</h1>
            <input 
                type = "text" 
                placeholder='eg Batman....' 
                name='arg'
                className = {styles.inputation} 
                onKeyUp = {(e) => func(e.target.value)}
            />
        </div>
        <div className = {styles.interactionContainer}>
            {movies.map(movie => (
                <div className = {styles.fightCard} key = {movie.rating}>
                    <div className = {styles.imageContainer}>
                        <Image src = {movie.image} width = {130} height = {100} className = {styles.image} alt = "img" />
                    </div>
                    <div className = {styles.textContainer}>
                        <p>{movie.title}</p>
                        <p>{movie.releaseDate}</p>
                        <p>{movie.rating}</p>
                    </div>
                    <button>More info</button>
                </div>
            ))}
        </div>
        <h1>hey</h1>
    </div>
  )
}

Где я могу ошибиться?

«даже если заголовок и значение одинаковы и цикл должен остановиться», вы никогда не останавливаете цикл. Таким образом, он продолжает зацикливаться, потому что вы никогда не говорили ему поступать иначе.

VLAZ 05.10.2023 18:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы выполняете цикл for: пока вы не не прервете, он будет продолжать выполняться.

В вашем примере: если вы напишете «Скрабы», он правильно войдет в оператор if внутри второго цикла вашей функции, но цикл for не остановится, если вы его не сломаете (вот почему вы продолжаете видеть весь консольный журнал фильма не найдено).

Поэтому вы можете добавить разрыв внутри if, например:

const func = (arg) => {
    for(let i = 0; i < movies.length; i++){
        if (arg === movies[i].title){
            console.info(movies[i].title)
            console.info(`The movie ${movies[i].title} has been found`);
            break;
        } else {
            console.info(`The movie ${arg} has not been found!`)
        }
    }
}

Интересно, что консоль по-прежнему регистрируется дважды даже после выполнения условия. Я поставил прерывание, но когда условие выполнено, оно все равно выполняет условие успеха дважды, хотя оператор else не выполняется.

Vuyi 05.10.2023 19:01
Ответ принят как подходящий

Это происходит потому, что вы не разорвали/вышли из цикла после выполнения условия, вы можете использовать перерыв внутри условия, если

const func = (arg) => {
    for(let i = 0; i < movies.length; i++){
        if (arg === movies[i].title){
            console.info('The movie ${movies[i].title} has been found');
            break;
        } else {
            console.info('The movie ${arg} has not been found!');
        }
    }
}

Я поставил перерыв, но он продолжает выполнять его дважды

Vuyi 05.10.2023 23:04

Другие вопросы по теме