为什么console.log没有显示任何内容?

时间:2019-07-01 15:06:58

标签: javascript

我有一个map函数,在某些情况下,它带给我很多带有不同值的字符串(在map函数之前,我也有一个filter函数)。 第一:我确定返回的是字符串,因为我console.log(typeof thing.name)并且它返回的是字符串。

在某些情况下,它带给我很多字符串,在另一些情况下,我带给我什么,因为返回取决于过滤器。

问题是:当过滤器未显示任何结果时,控制台日志不会打印任何内容。我知道,这很有意义。但是,我试图使过滤器返回0 /无/无结果时返回“ undefined,null,false / true”的条件。有可能的?

我有类似的东西:

filteredOffers.map(offer => {
  if(offer.name === "" || offer.name === null || offer.name === undefined) {
    console.log("Test test test")
  } else {
    return (
      <p>{offer.name}</p>
    )
  }
})

2 个答案:

答案 0 :(得分:2)

您的问题是

  

为什么console.log没有显示任何内容?

在您的问题中您说

  

当过滤器未显示任何结果时,控制台日志不会显示任何内容

发生了什么事。

.filter将返回一个新数组,其中仅包含已通过某些条件并返回true的数组元素。如果没有条件成立,它将返回一个空数组([])。

.map将循环遍历一个数组,并在此新数组中返回某些内容,如果它是一个空数组,则.map不会只返回该空数组。

当您说when the filter brings me no results时,这意味着.filter返回了一个空数组,而当您执行[].map(...)时,.map内部的函数将不会运行,而只会返回[]

回答Why console.log shows me nothing?,您正在做[].map(...),该函数永不运行。

答案 1 :(得分:1)

测试

!offer.name

在以下情况下将返回true

  • offer.name未定义
  • offer.name为空
  • offer.name为假
  • offer.name是空字符串('')
  • offer.name为0

所以您可能要按照以下条件过滤报价

filteredOffers.filter(offer => !!offer.name)

然后才映射输出

filteredOffers.filter(offer => !!offer.name).map(offer => (<p>{offer.name}</p>))