使用const 1 liner返回对象值

时间:2016-11-28 18:46:54

标签: javascript ecmascript-6 const

所以这里是一些使用对象数组的代码的示例,用于简单的任意数据。

底部的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

此代码段适用于建议的目标意义,但在范围之外定义MatchingFlight似乎不适合const

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

您可以在JavaScript中使用filter,它返回与此类

类似的过滤器匹配的元素
const flightDetails = (a) => 
a.filter(f => (f.id == flightNu))