2016-01-23 55 views
0

我想通過對城市名稱進行分組來格式化json對象。我正試圖採取一個單獨的數組,並移動基於找到的項目,並找不到建立一個字符串。我正在使用javascript/angularjs來實現這一點。Json對象格式化一組

我現在的字符串

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); 
+0

在jsfiddle.net創建一個jsFiddle。所以我們可以更好地理解你的問題。 –

回答

1

檢查下面的代碼,

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

2

工作演示請問這代碼你需要什麼?

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); 
+0

這裏的工作演示:https://jsfiddle.net/Shitsu/q5dyc333/ – Derlin

+2

你給出了幾乎正確的答案,但是如果(newarray [item.cityName]!= undefined)你錯過了 中的一件事刪除item.cityName ; newarray [item.cityName] .CityData.push(item); } 由於用戶提到cityData不會有cityName。 –

+0

謝謝@AdeshPandey編輯了答案。 – Derlin