为什么 if/else 语句即使在满足条件时也执行 else 部分

Why is if/else statement executing the else part even when the condition is met

提问人:Vuyi 提问时间:10/6/2023 更新时间:10/6/2023 访问量:63

问:

因此,我正在运行一个 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.log(movies[i].title)
                console.log(`The movie ${movies[i].title} has been found`)
            } else {
                console.log(`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>
  )
}

我哪里会出错?

JavaScript reactjs if-statement next.js 输入

评论

2赞 VLAZ 10/6/2023
"即使标题和值相同,并且循环应该停止“,您也永远不会停止循环。所以它继续循环,因为你从来没有告诉它这样做。

答:

1赞 Fabio Cazzavillan 10/6/2023 #1

你正在执行一个for循环:只要你不中断,它就会继续执行。

在您的示例中:如果您编写“Scrubs”,它将正确输入函数的第二个循环中的 if 语句,但除非您中断它,否则 for 循环不会停止(这就是为什么您一直看到未找到电影的所有控制台日志)。

因此,您可以在 if 中添加一个中断,如下所示:

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

评论

0赞 Vuyi 10/6/2023
有趣的是,即使在满足条件后,它仍然会进行两次控制台日志。我已经休息了,但是当满足条件时,尽管它没有运行else语句,但它仍然运行两次成功条件
1赞 Aakash Mittal 10/6/2023 #2

发生这种情况是因为您在满足条件后没有中断/退出循环,您可以在条件中使用 break inside if

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

评论

0赞 Vuyi 10/6/2023
我已经休息了,但它也继续执行两次