Javascript 根据提供的值筛选嵌套的键值对

Javascript 根据提供的值筛选嵌套的键值对,javascript,angular,dictionary,key-value,Javascript,Angular,Dictionary,Key Value,我是新的角度和做键值对第一次。我试图根据嵌套键值映射中的特定值获取键值对。我有一个嵌套的JSON数据格式: trips = { "20180201": [{ "journeyId": 1001, "Number": "001", "DriverName": "Alex", "Transporter": { "id": "T1", "number": "AN01001",

我是新的角度和做键值对第一次。我试图根据嵌套键值映射中的特定值获取键值对。我有一个嵌套的JSON数据格式:

trips = {
"20180201": [{
        "journeyId": 1001,
        "Number": "001",
        "DriverName": "Alex",
        "Transporter": {
            "id": "T1",
            "number": "AN01001",
            "Company": "Tranzient"
        },
        "place": [{
                "id": 001,
                "value": "Washington DC"
            }]
            [{
                "id": 002,
                "value": "Canberra"
            }]
    }]
    [{
        "journeyId": 1002,
        "Number": "001",
        "DriverName": "Tom",
        "Transporter": {
            "id": "T2",
            "number": "AN01002",
            "Company": "Trax"
        },
        "place": [{
                "id": 002,
                "value": "Canberra"
            }]
            [{
                "id": 004,
                "value": "Vienna"
            }]
    }]
    [{
        "journeyId": 1003,
        "Number": "004",
        "DriverName": "Jack",
        "Transporter": {
            "id": "T3",
            "number": "AN01003",
            "Company": "Trax"
        },
        "place": [{
                "id": 001,
                "value": "Washington DC"
            }]
            [{
                "id": 004,
                "value": "Vienna"
            }]
    }],
"20180211": [{
        "journeyId": 1004,
        "Number": "005",
        "DriverName": "Jack",
        "Transporter": {
            "id": "T3",
            "number": "AN01013",
            "Company": "Trax"
        },
        "place": [{
                "id": 005,
                "value": "Bridgetown"
            }]
            [{
                "id": 006,
                "value": "Ottawa"
            }]
            [{
                "id": 004,
                "value": "Vienna"
            }]

    }]
    [{
        "journeyId": 1005,
        "Number": "005",
        "DriverName": "Jerry",
        "Transporter": {
            "id": "T3",
            "number": "AN01020",
            "Company": "Trax"
        },
        "place": [{
                "id": 005,
                "value": "Bridgetown"
            }]
            [{
                "id": 006,
                "value": "Ottawa"
            }]
    }],
"20180301": [{
    "journeyId": 1006,
    "Number": "005",
    "DriverName": "demy",
    "Transporter": {
        "id": "T3",
        "number": "AN01003",
        "Company": "Trax"
    },
    "place": [{
            "id": 005,
            "value": "Bridgetown"
        }]
        [{
            "id": 006,
            "value": "Ottawa"
        }]
}]};
我试图过滤掉所有的trips键值对,它们的位置[value]=Vienna

我的预期产出应该是:

trips = {
    "20180201": 
        [{
           "journeyId": 1002,
            "Number": "001",
            "DriverName":"Tom",
            "Transporter": {
                "id": "T2",
                "number": "AN01002",
                "Company": "Trax"
            }
            "place": [{"id":002,"value":"Canberra" }]
                      [{"id":004,"value":"Vienna"}]
        }]
        [{
             "journeyId": 1003,
            "Number": "004",
            "DriverName":"Jack",
            "Transporter": {
                "id": "T3",
                "number": "AN01003",
                "Company": "Trax"
            }
            "place": [{"id":001,"value":"Washington DC" }]
                      [{"id":004,"value":"Vienna"}]
        }],
    "20180211": [{
             "journeyId": 1004,
            "Number": "005",
            "DriverName":"Jack",
            "Transporter": {
                "id": "T3",
                "number": "AN01013",
                "Company": "Trax"
            }
            "place": [{"id":005,"value":"Bridgetown" }]
                      [{"id":006,"value":"Ottawa"}]
                      [{"id":004,"value":"Vienna"}]

        }]

};
请帮我找到正确的方法。我正在尝试以下功能,但被卡在了中间:

for (var date in trips) {
        var res={}
        for (var index = 0; index < trips[date].length; index++) {
            var data = trips[date][index];

             //rest of the logic here

          }

      }
for(trips中的var日期){
var res={}
对于(var索引=0;索引<行程[date]。长度;索引++){
var数据=行程[日期][指数];
//剩下的逻辑在这里
}
}
您可以试试这个

const expected = {};
for (let date in trips) {
  for (let trip of trips[date]) {
    if (trip.place.map(place => place.value).includes('Vienna')) {
      expected[date] = trips[date];
    }
  }
}
一旦你的对象是有效的,这应该会起作用

你可以试试这个

const expected = {};
for (let date in trips) {
  for (let trip of trips[date]) {
    if (trip.place.map(place => place.value).includes('Vienna')) {
      expected[date] = trips[date];
    }
  }
}
一旦你的对象是有效的,这应该会起作用

在这里,您可以使用

const trips={
"20180201": [{
“journeyId”:1001,
“编号”:“001”,
“司机姓名”:“亚历克斯”,
“运输商”:{
“id”:“T1”,
“编号”:“AN01001”,
“公司”:“Tranzient”
},
“地点”:[{
“id”:001,
“价值”:“华盛顿特区”
},
{
“id”:002,
“价值”:“堪培拉”
}
],
},
{
“journeyId”:1002,
“编号”:“001”,
“司机姓名”:“汤姆”,
“运输商”:{
“id”:“T2”,
“编号”:“AN01002”,
“公司”:“Trax”
},
“地点”:[{
“id”:2,
“价值”:“堪培拉”
},
{
“id”:4,
“价值”:“维也纳”
}
],
},
{
“journeyId”:1003,
“编号”:“004”,
“司机姓名”:“杰克”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01003”,
“公司”:“Trax”
},
“地点”:[{
“id”:1,
“价值”:“华盛顿特区”,
}, {
“id”:4,
“价值”:“维也纳”,
}],
}
],
"20180211": [{
“journeyId”:1004,
“编号”:“005”,
“司机姓名”:“杰克”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01013”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
},
{
“id”:4,
“价值”:“维也纳”
}
],
},
{
“journeyId”:1005,
“编号”:“005”,
“司机姓名”:“杰瑞”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01020”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
}
],
}
],
"20180301": [{
“journeyId”:1006,
“编号”:“005”,
“DriverName”:“demy”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01003”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
}
],
}],
};
const filteredTrips=Object.keys(trips).reduce((tmp,x)=>{
const filtered=trips[x].filter(y=>y.place.some(z=>z.value==='Vienna');
如果(过滤的长度){
tmp[x]=已过滤;
}
返回tmp;
}, {});
控制台日志(filteredTrips)在这里,您可以使用

const trips={
"20180201": [{
“journeyId”:1001,
“编号”:“001”,
“司机姓名”:“亚历克斯”,
“运输商”:{
“id”:“T1”,
“编号”:“AN01001”,
“公司”:“Tranzient”
},
“地点”:[{
“id”:001,
“价值”:“华盛顿特区”
},
{
“id”:002,
“价值”:“堪培拉”
}
],
},
{
“journeyId”:1002,
“编号”:“001”,
“司机姓名”:“汤姆”,
“运输商”:{
“id”:“T2”,
“编号”:“AN01002”,
“公司”:“Trax”
},
“地点”:[{
“id”:2,
“价值”:“堪培拉”
},
{
“id”:4,
“价值”:“维也纳”
}
],
},
{
“journeyId”:1003,
“编号”:“004”,
“司机姓名”:“杰克”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01003”,
“公司”:“Trax”
},
“地点”:[{
“id”:1,
“价值”:“华盛顿特区”,
}, {
“id”:4,
“价值”:“维也纳”,
}],
}
],
"20180211": [{
“journeyId”:1004,
“编号”:“005”,
“司机姓名”:“杰克”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01013”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
},
{
“id”:4,
“价值”:“维也纳”
}
],
},
{
“journeyId”:1005,
“编号”:“005”,
“司机姓名”:“杰瑞”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01020”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
}
],
}
],
"20180301": [{
“journeyId”:1006,
“编号”:“005”,
“DriverName”:“demy”,
“运输商”:{
“id”:“T3”,
“编号”:“AN01003”,
“公司”:“Trax”
},
“地点”:[{
“id”:5,
“价值”:“布里奇敦”
},
{
“id”:6,
“价值”:“渥太华”
}
],
}],
};
const filteredTrips=Object.keys(trips).reduce((tmp,x)=>{
const filtered=trips[x].filter(y=>y.place.some(z=>z.value==='Vienna');
如果(过滤的长度){
tmp[x]=已过滤;
}
返回tmp;
}, {});

控制台日志(filteredTrips)假设作者只是输入了错误的数据。 代码如下:

function getTripsWithPlaceVanillaJS(trips, place) {
    var result = {};

    for (var key in trips) {
        if (trips.hasOwnProperty(key)) {
            var journeys = trips[key];
            var filteredJourneys = [];

            for (var i = 0; i < journeys.length; i++) {
                var journey = journeys[i];

                for (var j = 0; j < journey.place.length; j++) {
                    if (journey.place[i].value === place) {
                        filteredJourneys.push(journey);
                        break;
                    }
                }
            }
            if (filteredJourneys.length) {
                result[key] = filteredJourneys;
            }
        }
    }

    return result;
}

function getTripsWithPlaceSugaredES6(trips, place) {
    return Object.keys(trips).reduce((result, key) => {
        const filteredJourneys = trips[key].filter(journey => journey.place.some(item => item.value === place));

        if (filteredJourneys.length) {
            result[key] = filteredJourneys;
        }
        return result;
    }, {});
}
函数gettripswithplace