0

我有一个如下所示的数据集:

{
"Stops": [
    {
        "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
        "Routes": [
            "42",
            "43",
            "H1",
            "L2"
        ]
    }
]

}

另一个看起来像这样:

{
"Predictions": [
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 7,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 25,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Chevy Chase Circle",
        "Minutes": 32,
        "RouteID": "L2"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 36,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 58,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 69,
        "RouteID": "42",
    }
],
"StopName": "Columbia Rd Nw + Mintwood Pl Nw"

}

我想在第一组中结合 Route ID 上的数据,专门添加要设置的分钟数。所以输出会是这样的:

{
"Stops": [
    {
        "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
        "Routes": [
            {
                "42": [
                    {
                        "Minutes": [7, 25,36,58,69]
                    }
                ],
                "43": [
                    {
                        "Minutes": []
                    }
                ],
                "H1":[ 
                    {
                        "Minutes": []
                    }
                ],
                "L2": [
                    {
                        "Minutes": [32]
                    }
                ]
            }
        ],
        "StopID": "1001779"
    }
]
}

我不知道如何编写一些 javascript/jquery 来进行这种合并。有任何想法吗?

4

2 回答 2

0

请,这是更新的代码,包含空数组和所有内容。它是纯 javascript,因此不需要库。我知道它只是一个粗略的例子,但它有效,我希望它能帮助你找到你的方式。以后你可以完善它。

var 

    stops = {
        "Stops": [
            {
                "Lat": 38.92092,
                "Lon": -77.043684,
                "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
                "Routes": [
                    "42",
                    "43",
                    "H1",
                    "L2"
                ],
                "StopID": "1001779"
            }
        ]
    },

    predictions = {
        "Predictions": [
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 7,
                "RouteID": "42",
                "VehicleID": "7136"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 25,
                "RouteID": "42",
                "VehicleID": "7103"
            },
            {
                "DirectionNum": "0",
                "DirectionText": "North to Chevy Chase Circle",
                "Minutes": 32,
                "RouteID": "L2",
                "VehicleID": "2207"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 36,
                "RouteID": "42",
                "VehicleID": "7132"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 58,
                "RouteID": "42",
                "VehicleID": "7111"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 69,
                "RouteID": "42",
                "VehicleID": "7135"
            }
        ],
        "StopName": "Columbia Rd Nw + Mintwood Pl Nw"
    };

    var routeTimes = {};
    for (var index in predictions.Predictions) {
        if(!routeTimes.hasOwnProperty(predictions.Predictions[index].RouteID)) {
            routeTimes[predictions.Predictions[index].RouteID] = [];
            routeTimes[predictions.Predictions[index].RouteID].push(predictions.Predictions[index].Minutes);
        } else {
            routeTimes[predictions.Predictions[index].RouteID].push(predictions.Predictions[index].Minutes);
        }
    }

    var 
        routes = stops.Stops[0].Routes,
        routesVsMinutes = {};

    for(var i in routes) {
        if (!routesVsMinutes.hasOwnProperty(routes[i])) {
            routesVsMinutes[routes[i]] = {Minutes: []};
        } 
        if (routeTimes[routes[i]]) {
            routesVsMinutes[routes[i]].Minutes = routeTimes[routes[i]];
        }
    }      
    stops.Stops[0].Routes = routesVsMinutes;

    console.log(stops);
于 2013-01-13T21:28:30.667 回答
0

您可以使用jQuery 地图

json1.Stops.routes = $.map(json1.Stops[0].Routes, function(route){
  //Take all predictions which concern the route
  var availables = $.filter(json2.Predictions, function(prediction){
    return prediction.RouteID === route
  })
  //Extract all minutes
  var minutesArray = $.map(availables, function(available){
    return available.Minutes
  })
  // Return the object to put in "routes"
  return {"Minutes": minutesArray}
})

和:

json1 = {"Stops":[...]}
json2 = {"Predictions:[...]}
于 2013-01-13T21:29:45.093 回答