Javascript集合使用Lodash查找值

Javascript集合使用Lodash查找值,javascript,lodash,Javascript,Lodash,我有一个如下所示的数组。我想知道出发和到达字段中的值 数组: var data = { "origin": "Antalya", "destination": "IST", "flights": [{ "provider": "thy", "time": "2017-07-07 10:30", "legs": [{ "departure": "AYT", "arrival":

我有一个如下所示的数组。我想知道出发和到达字段中的值

数组:

var data = {
    "origin": "Antalya",
    "destination": "IST",

    "flights": [{
        "provider": "thy",
        "time": "2017-07-07 10:30",
        "legs": [{
            "departure": "AYT",
            "arrival": "IST"
        }]
    },{
        "provider": "thy",
        "time": "2017-07-07 14:30",
        "legs": [{
            "departure": "AYT",
            "arrival": "ESB"
        },{
           "departure": "ESB",
            "arrival": "IST" 
        }]
    },{
        "provider": "pegasus",
        "time": "2017-07-07 06:30",
        "legs": [{
            "departure": "AYT",
            "arrival": "ADB"
        },{
            "departure": "ADB",
            "arrival": "IST"
        }]
    }]
};
我想创建这样的新阵列:

[“AYT”、“IST”、“ESB”、“ADB”]


如何使用lodash处理它?

通过数据循环并创建字符串数组,然后使用uniq函数,如:

var data={“始发地”:“安塔利亚”,“目的地”:“IST”,“航班”:[{“提供商”:“您的”,“时间”:“2017-07-07 10:30”,“航段”:[{“出发地”:“AYT”,“到达地”:“IST”}}},{“提供商”:“您的”,“时间”:“2017-07-07 14:30”,“航段”:[{“出发地”:“AYT”,“到达地”:“ESB”},{“提供商”:“飞马”,“时间”:“2017-07-07-07-07 06:30”,“航段”:[{“出发”:“AYT”,“到达”:“ADB”},{“出发”:“ADB”,“到达”:“IST”}]};
风险价值=[];
_.each(data.flights,flights=>{
_.each(flight.legs,leg=>{
腿。推(腿。离开);
腿。推(腿。到达);
});
});
console.log(q.uniq(legs));

以下是使用lodash的解决方案:

let result = _(data.flights)
    .flatMap('legs')
    .flatMap(_.values)
    .uniq()
    .value();

首先我们得到一个展平的支腿数组,将其转换为每个支腿属性值的展平数组,然后最终得到唯一的值。

谢谢你的回答,但是有没有一种使用lodash方法的较短方法?:)使用展平的解决方案不起作用。请参阅下面我的评论。没有,我意识到我使用了错误的lodash方法我的jsFiddle中的rsion:S删除了答案的这一部分。很好,但是当您希望数组中的每个元素都通过操纵器函数时,通常会使用flatmap,在这种情况下,这是不需要的,我们应该在这里使用flatte,请参见上面的答案。您确实需要
flatmap
,因为您想要从flights数组中取出腿。您的解决方案是什么使用展平不起作用,因为展平采用一个参数,即
数据。在这种情况下,flights
。作为第二个参数传递到flatMap的
“legs”
将被忽略。