簡體   English   中英

如何將以JSON格式返回的數據分組並返回?

[英]How can I group data returned in JSON format and return it?

我有以下形式的JSON字符串:

[
    {"ID":153,"CircuitID":53,"StartTime":"2014-11-12 12:45:00","EventFormatID":224,"TotalPlaces":8,"BookedPlaces":0,"ProvisionalPlaces":0},
    {"ID":161,"CircuitID":53,"StartTime":"2014-11-12 17:15:00","EventFormatID":224,"TotalPlaces":0,"BookedPlaces":0,"ProvisionalPlaces":0},
    {"ID":734,"CircuitID":53,"StartTime":"2014-11-12 18:30:00","EventFormatID":231,"TotalPlaces":14,"BookedPlaces":0,"ProvisionalPlaces":0}
]

我將代替事件格式ID和電路ID的名稱

我需要做的是將結果按事件格式ID分組,並以以下格式返回結果:

Event 224 : 12:45 (8 places available), 17:15 (0 places available)
Event 231 : 18:30 (14 places available)

我似乎無法弄清楚如何遍歷數據,將其按事件格式ID分組,以所需格式顯示!

謝謝

您可以使用其他任何庫嗎? 我會使用lo-dash ,這將使這個相對簡單:

var grouped = _.groupBy(data, "EventFormatID");
_(grouped).forEach(function (group, key) {
    console.log("Event:" + key);
    _(group).forEach(function (course) {
        console.log(course.StartTime + " (" + course.TotalPlaces + " places available)");
    });
});

顯然,上面的示例登錄到控制台,但是更改它以構建所需的任何字符串或對象相當簡單。

使用lodash /下划線,甚至使用ES5數組和對象方法,都更容易,但是由於您詢問的是純JS:

var data = {}, results = [], i, j, id, time, obj, evts; // obj is your object above
for (i=0; i<obj.length; i++) {
  id = obj[i].EventFormatID;
  time = obj[i].StartTime; // you can simplify to get just the time, not the datetime, if you prefer
  data[id] = data[id] || [];
  data[id].push({"time":time,"places":obj[i].TotalPlaces});
}
// now you have a proper data structure, just print it out
for (i in data) {
  if (data.hasOwnProperty(i)) {
    // just show the output properly formatted
    evts = [];
    for (j=0;i<data[i].length;j++) {
       evts.push(data[i][j].time+" ("+data[i][j].places+" places available)");
    }
    results.push("Event "+i+" : "+evts.join(","));
  }
}

ES5使這變得如此簡單

var data = {}, results = [], obj; // obj is your object above
obj.forEach(function(val,i) {
  data[val.EventFormatID] = data[val.EventFormatID] || [];
  data[val.EventFormatID].push({"time":val.StartTime,"places":val.TotalPlaces});
});
// now you have a proper data structure, just print it out
Object.keys(data).forEach(function(key) {
  var value = data[key], evts = [];
  value.forEach(function(elm) {
     evts.push(elm.time+" ("+elm.places+" places available)");
  });
  results.push("Event "+key+" : "+evts.join(","));
});

Lodash更容易。

請看一下:

http://jsfiddle.net/m260n5ud/

HTML

<div id="contentDiv"></div>

JS

function tidyUp(jsonArray) {
    var myObject = {};
    for (i = 0; i < jsonArray.length; i++) {
        var key = jsonArray[i]['EventFormatID'];
        var time = jsonArray[i]['StartTime'].replace(' ', ':').split(/[- :]/);
        time = time[3] + ":" + time[4];
        var totalPlace = jsonArray[i]['TotalPlaces'];

        if (myObject[key] == null) {
            myObject[key] = "Event : " + key + " : " + time + " ( " + totalPlace + " places available)";
        } else {
            myObject[key] += ", " + time + " ( " + totalPlace + " places available)";
        }
    }
    console.log(myObject);

    for (var k in myObject) {
        document.getElementById('contentDiv').innerHTML += myObject[k] + "<br/>";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM