使用 groupby 格式化 Json 对象

Json object formatting with a groupby

本文关键字:对象 Json 格式化 groupby 使用      更新时间:2023-09-26

我正在尝试通过对城市名称进行分组来格式化 json 对象。我正在尝试使用一个单独的数组并根据找到和未找到来移动项目以构建字符串。我正在使用javascript/angularjs来实现这一点。

我当前的字符串

CurrentDataFormat = 
[
{"Id":17,"code":"123","cityName":"Los Angeles","startDate":"1/20/2016","endDate":"1/20/2016"},
{"Id":18,"code":"456","cityName":"Chicago    ","startDate":"1/22/2016","endDate":"1/25/2016"},
{"Id":19,"code":"789","cityName":"Los Angeles","startDate":"1/13/2016","endDate":"1/21/2016"}
]

我正在尝试实现这种格式

ExpectedDataFormat =
[{
"name":"Los Angeles",
"CityData":
[
{"Id":"17","code":"123","startDate":"1/20/2016","endDate":"1/20/2016"},
{"Id":"19","code":"789","startDate":"1/13/2016","endDate":"1/21/2016"}
]},{
"name":"Chicago",
"CityData":
[
{"Id":"18","code":"456","startDate":"1/22/2016","endDate":"1/25/2016"},
]}
}

逻辑我在尝试什么(尽管尝试使用不同的数据)

var array = [
    { "name": "project1", "url": "picture1-1.jpg"},
    { "name": "project1", "url": "picture1-2.jpg"},
    { "name": "project2", "url": "picture2-1.jpg"},
    { "name": "project3", "url": "picture3-1.jpg"},
    { "name": "project1", "url": "picture1-3.jpg"},
    { "name": "project4", "url": "picture4-1.jpg"},
    { "name": "project3", "url": "picture3-2.jpg"},
    { "name": "project1", "url": "picture1-4.jpg"}
];
var separateArray = [];
$.each(array, function (i, item) {   
    var foundItem = false;
    $.each(separateArray, function (y, newItem) {
        if (newItem.name == item.name) {
            if (!(newItem.url instanceof Array)) {
                newItem.url = [newItem.url];
            }
            newItem.url.push(item.url);
            foundItem = true;
        }
    });
    if (!foundItem) {
     separateArray.push(item);   
    }
});
console.log(separateArray);

这段代码会做你需要的吗?

var newarray = [];
CurrentDataFormat.forEach(function(item){
    if(newarray[item.cityName] != undefined){
      var key = item.cityName;
      delete item.cityName;
      newarray[key].CityData.push(item);
  }else{
    var o = {};
    o.name = item.cityName;
    o.CityData = [];
    o.CityData.push(item);
    newarray[o.name] = o;
  }
});
console.log(newarray);

检查以下代码,

CurrentDataFormat = [{
        "Id": 17,
        "code": "123",
        "cityName": "Los Angeles",
        "startDate": "1/20/2016",
        "endDate": "1/20/2016"
    },
    {
        "Id": 18,
        "code": "456",
        "cityName": "Chicago",
        "startDate": "1/22/2016",
        "endDate": "1/25/2016"
    },
    {
        "Id": 19,
        "code": "789",
        "cityName": "Los Angeles",
        "startDate": "1/13/2016",
        "endDate": "1/21/2016"
    }
]

var refinedArray = {};
for (i = 0; i < CurrentDataFormat.length; i++) {
    refinedArray[CurrentDataFormat[i].cityName] = refinedArray[CurrentDataFormat[i].cityName] ? refinedArray[CurrentDataFormat[i].cityName] : {};
    refinedArray[CurrentDataFormat[i].cityName].name = CurrentDataFormat[i].cityName;
    refinedArray[CurrentDataFormat[i].cityName].CityData = refinedArray[CurrentDataFormat[i].cityName].CityData ? refinedArray[CurrentDataFormat[i].cityName].CityData : [];
    refinedArray[CurrentDataFormat[i].cityName].CityData.push({
        "Id": CurrentDataFormat[i].Id,
        "code": CurrentDataFormat[i].code,
        "startDate": CurrentDataFormat[i].startDate,
        "endDate": CurrentDataFormat[i].endDate
    });
}
var ExpectedDataFormat = [];
for (singleCityName in refinedArray){
    ExpectedDataFormat.push({'name' : refinedArray[singleCityName].name, 'CityData' : refinedArray[singleCityName].CityData});
};

ExpectedDataFormat保持您想要的输出

在jsFiddle的工作演示