2016-06-28 3 views
-1

Извините, если это было задано раньше. У меня есть структура JSON как:группа/форматирование json данных в Javascript

{"data":[ 
    {"Date":"03/04/2016","Key":"A","Values":"123"}, 
    {"Date":"04/04/2016","Key":"A","Values":"456"}, 
    {"Date":"03/04/2016","Key":"B","Values":"789"}, 
    {"Date":"04/04/2016","Key":"B","Values":"012"} 
]} 

Я хочу изменить это в другой формат, который в основном сгруппированных ключом и сочетает в себе остальную часть поля значений

{"Result":[ 
    { 
    "Key":"A" 
    "Values":[["03/04/2016","123"], ["04/04/2016","456"]] 
    },  
    {"Key":"B" 
    "Values":[["03/04/2016","789"]},["04/04/2016","012"]] 
    } 
]} 

Я хочу сделать это JavaScript/html

+1

{ "Key": "B" [.... эта структура является недействительным – brk

ответ

0

Вы можете выполнить итерацию и построить новый объект, если он не существует.

var object = { "data": [{ "Date": "03/04/2016", "Key": "A", "Values": "123" }, { "Date": "04/04/2016", "Key": "A", "Values": "456" }, { "Date": "03/04/2016", "Key": "B", "Values": "789" }, { "Date": "04/04/2016", "Key": "B", "Values": "012" }], result: [] }; 
 

 
object.data.forEach(function (a) { 
 
    if (!this[a.Key]) { 
 
     this[a.Key] = { Key: a.Key, Values: [] }; 
 
     object.result.push(this[a.Key]); 
 
    } 
 
    this[a.Key].Values.push([a.Date, a.Values]); 
 
}, Object.create(null)); 
 

 
console.log(object);

0

Я думаю, что это может быть лучшим ответом (но ответ Nina «s это подходит для ваших терминов проблемы), если элементы массива данных имеют разные свойства, и вы не хотите изменить входные данные.

var raw = {"data":[ 
 
    {"Date":"03/04/2016","Key":"A","Values":"123"}, 
 
    {"Date":"04/04/2016","Key":"A","Values":"456"}, 
 
    {"Date":"03/04/2016","Key":"B","Values":"789"}, 
 
    {"Date":"04/04/2016","Key":"B","Values":"012"} 
 
]}; 
 

 
var result = new Map; 
 
raw.data.forEach(entry => { 
 
    var key = entry.Key; 
 
    if (this[key]) 
 
    return this[key].push(getClonedData(entry)); 
 

 
    this[key] = [getClonedData(entry)]; 
 
    result.set(key, { 
 
    Key: key, 
 
    Values: this[key] 
 
    }) 
 
}, Object.create(null)); 
 

 
var filtered = { 
 
    result: [...result.values()] 
 
} 
 
console.log(filtered); 
 

 
function getClonedData(entry) { 
 
    data = Object.assign({}, entry); 
 
    delete data.Key; 
 
    return data; 
 
}

Смежные вопросы