带有“ ===”的Javascript字符串相等

问题描述 投票:-1回答:1

我正在编写一个React应用程序,并且在试图消除所有警告的同时,我发现了一个奇怪的错误...

handleLike = id => {
const movies = [...this.state.movies];
const movie = movies.filter(obj => obj._id === id);
if (movie.map(obj => obj.liked) == "fa fa-heart-o") {
  movie.map(obj => (obj.liked = "fa fa-heart"));
  this.setState({ movies });
} else {
  movie.map(obj => (obj.liked = "fa fa-heart-o"));
  this.setState({ movies });
}

如果(movie.map(obj => obj.liked)==“ fa fa-heart-o”)我不会使用(===)输入check,因为它将是虚假的出于某种原因,但是obj.like在Console上用typeof记录后,它说它是一个字符串,所以它绝对应该是真实的,即使在我添加ToString()之后它也没有真实...我仔细检查了所有内容,我错过了什么?

预先感谢!

javascript reactjs types equality coercion
1个回答
1
投票

您正在做很多不必要的map ping。

1] movies.filter(obj => obj._id === id);将返回一个元素的数组,该元素是movie对象。要获取实际的电影对象,您需要使用movies.filter(obj => obj._id === id)[0];。您可能还需要考虑使用find(抓住影片对象)或find标识所需影片的索引。

2] findIndex没有意义-您试图将一个数组(findIndex总是返回一个新数组)与字符串进行比较。我真的很惊讶。

根据您的评论,我可能会如下编写代码:

if (movie.map(obj => obj.liked) == "fa fa-heart-o")
© www.soinside.com 2019 - 2024. All rights reserved.