2016-12-27 5 views
0

Я хочу создать новую уникальную форму JSON. Существующий JSON по фильтру.Создать новую уникальную форму JSON Существующий JSON по фильтру

Я хочу следующий JSON:

var newJson = [ 
    {"38:1":["40:89","39:86","40:88"]}, 
    {"38:6":["39:339"]} 
] 

Я следующий существующий JSON.

var existJson = [ 
    {d: "40:89", t: "38:1"}, 
    {d: "39:86", t: "38:1"}, 
    {d: "40:88", t: "38:1"}, 
    {d: "39:339", t: "38:6"} 
] 

Я хочу создать слесарь и создал новый уникальный JSON как newJson необходимости в какой-то фильтр, получить уникальный t в качестве ключа и d в качестве значения массива.

{ t : [d1, d2, d3] } 
+0

Это обычно называется группировкой и часто обрабатывается подпрограммами, называемыми 'groupBy' или чем-то подобным. Найдите это, и вы должны найти множество решений. Кстати, это не JSON, это просто обычный старый JavaScript. –

ответ

1

Вы можете использовать Array.prototype.reduce создать hash table и вывести новый JSON из него - смотрите демо ниже:

var existJson = [ 
 
    {d: "40:89", t: "38:1"}, 
 
    {d: "39:86", t: "38:1"}, 
 
    {d: "40:88", t: "38:1"}, 
 
    {d: "39:339", t: "38:6"} 
 
]; 
 

 
// create a hashtable first 
 
var hash = existJson.reduce(function(p,c){ 
 
    p[c.t] = p[c.t] || []; 
 
    p[c.t].push(c.d); 
 
    return p; 
 
},{}) 
 

 
// now convert into the required array 
 
var result = Object.keys(hash).map(function(e){ 
 
    let el = {}; 
 
    el[e] = hash[e]; 
 
    return el; 
 
}); 
 

 
console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

+0

OP хотел, чтобы 'newJson' был массивом объектов, ваш подход возвращает один объект – RomanPerekhrest

+0

@RomanPrekhrest исправил его, спасибо! :) – kukkuz

+0

ОК, добро пожаловать ... – RomanPerekhrest

1

По вашему требованию:

Я хочу следующее: JSON

вар newJson = [{ "38: 1": [ "40:89", "39:86", "40: 88 "]}, {
" 38: 6 ": [" 39: 339" ]}]

Простое решение с использованием Array.forEach() и Array.map() функции:

var existJson = [ 
 
    {d: "40:89", t: "38:1"}, 
 
    {d: "39:86", t: "38:1"}, 
 
    {d: "40:88", t: "38:1"}, 
 
    {d: "39:339", t: "38:6"} 
 
], 
 
    newJson = {}; 
 

 
existJson.forEach(function (o) { 
 
    (this[o.t])? this[o.t].push(o.d) : this[o.t] = [o.d]; 
 
}, newJson); 
 

 
newJson = Object.keys(newJson).map(function (k) { 
 
    var o = {}; 
 
    o[k] = newJson[k]; 
 
    return o; 
 
}); 
 
console.log(newJson);

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

  • Нет связанных вопросов^_^