【问题标题】:return object values with const 1 liner [duplicate]使用 const 1 衬垫返回对象值 [重复]
【发布时间】:2017-04-12 14:11:18
【问题描述】:

下面是一些代码的示例,它使用对象数组来处理简单的任意数据。

底部的 const 函数查找我的航班号,表示为 flightNu

var flights = [{
        "id": 1234,
        "airline": "Delta",
        "depart": "11/23/2016 10:25 AM",
        "arrive": "11/23/2016 11:35 AM",
        "from": "TPA",
        "to": "MEM"
    }, {
        "id": 4321,
        "airline": "AA",
        "depart": "11/23/2016 12:25 PM",
        "arrive": "11/23/2016 2:35 PM",
        "from": "DWF",
        "to": "SEA"
    }]

var flightNu = 4321; 

const flightDetails = (a) => 
a.map(f => (f.id == flightNu) ? f : null )


console.log(flightDetails(flights))

所以我的问题在于正确定义这个 const 函数

const flightDetails = (a) => 
a.map(f => (f.id == flightNu) ? f : null )

这是返回[null, Object] 对象是正确的,带有 flightNu。 找到了,很酷,但假设我添加了 100 个对象,那将返回 99 个空值。那是 99 个问题,但匹配的航班号不是一个。 (对不起)

有人可以阐明使用它的好方法吗?也许我不应该使用三元运算符。如果我能返回正确的f[index],那就太好了。

最好不要将 Object 分配给另一个变量

var MatchingFlight;

const flightDetails = (a) => 
 a.map(f => {
     if (f.id === flightNu){
              MatchingFlight = f;
     }
 }) ? MatchingFlight : null   //returns Object {}  close but meh

这个 sn-p 在建议的目标意义上有效,但在范围之外定义 MatchingFlight 似乎不适用于const

【问题讨论】:

  • 如果你想要第一个匹配,使用.find()而不是.map()
  • 而不是map 使用filter
  • @torazaburo 好吧,我为一个可行的方案添加了更新,还有其他可用的 sn-ps,但真正的答案是 SLaks 有 3 种可能的方法,这不是 sn-p,所以我只是想更新一个可能的 sn-p 以确保完整性

标签: javascript ecmascript-6 constants


【解决方案1】:

map() 将每个元素转换为其他元素。 这不是你想要的。

您需要filter()(仅返回匹配元素)或find()(返回第一个匹配项),而不是map()

【讨论】:

  • find() 在某些情况下会很好,但由于filter() 返回一个数组,假设为了参数而找到多个航班号,那么在这种情况下效果很好。
【解决方案2】:

您可以在 JavaScript 中使用filter,它返回与过滤器匹配的元素,如下所示

const flightDetails = (a) => 
a.filter(f => (f.id == flightNu))

【讨论】:

  • 我玩过过滤器并返回了几乎相同的东西,只是这次我没有使用三元运算符。我应该重要还是重要?
  • 视情况而定,有时如果对象未定义,那么我们可以使用三元运算符,因为如果失败,我们会将其分配给 null。否则没有必要使用三元运算符。希望这可以帮助。回答了你的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2012-07-18
  • 2019-03-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多