0

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

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

问题是:当过滤器没有给我带来任何结果时,控制台日志不会打印任何内容。我知道,这是有道理的。但是我正在尝试创建一个条件,当过滤器返回 0/none/nothing 结果时,它会返回类似“未定义、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>
    )
  }
})
4

2 回答 2

2

你的问题是

为什么 console.log 什么也没显示?

在你的问题中你说

当过滤器没有给我带来任何结果时,控制台日志不打印任何内容

发生在哪里。

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

.map将循环遍历一个数组并在这个新数组中返回一些东西,如果它是一个空数组,.map则不会运行,只返回那个空数组。

当你说它when the filter brings me no results意味着.filter返回一个空数组时,当你这样做时[].map(...),里面的函数.map将不会运行,它只会返回[]

这就是答案Why console.log shows me nothing?,你正在做[].map(...)并且该功能永远不会运行。

于 2019-07-01T15:25:16.260 回答
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>))
于 2019-07-01T15:17:32.913 回答