我想通过过滤器创建新的唯一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"}
]
我想创建fitter并创建新的唯一JSON,例如newJson
需要一些过滤器,它将唯一t
作为键,d
作为数组值。
{ t : [d1, d2, d3] }
答案 0 :(得分: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;}
答案 1 :(得分:1)
您可以使用lodash(或下划线)groupBy函数
答案 2 :(得分:1)
根据您的要求:
我想关注json:
var newJson = [{" 38:1":[" 40:89"," 39:86"" 40:88&# 34;]},
{" 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);