提问人:Vuyi 提问时间:10/6/2023 更新时间:10/6/2023 访问量:63
为什么 if/else 语句即使在满足条件时也执行 else 部分
Why is if/else statement executing the else part even when the condition is met
问:
因此,我正在运行一个 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>
)
}
我哪里会出错?
答:
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
我已经休息了,但它也继续执行两次
评论