【问题标题】:Why console.log shows me nothing?为什么 console.log 什么也没显示?
【发布时间】:2019-07-22 03:28:57
【问题描述】:

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

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

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

【问题讨论】:

  • 什么都没有记录时offer 是什么?
  • 您的问题对我来说很清楚,IMO 缺乏相关代码来帮助您。请提供Minimal Reproducible Example
  • 也许filteredOffers 是一个空数组并且.map 永远不会运行?
  • 如果过滤器没有返回任何结果,那么地图为什么会运行?
  • 我不认为.map() 是适合这项工作的工具,因为它总是返回一个与原始数组长度相同的数组。您将在数组中获得undefined "holes"。

标签: javascript


【解决方案1】:

你的问题是

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

在你的问题中你说

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

发生了什么事。

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

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

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

回答Why console.log shows me nothing?,你正在做[].map(...) 并且函数永远不会运行。

【讨论】:

    【解决方案2】:

    测试

    !offer.name
    

    会在什么时候返回真

    • 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-01-20
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多