通过过滤器创建新的唯一JSON表单现有JSON

时间:2016-12-27 07:55:13

标签: javascript arrays grouping

我想通过过滤器创建新的唯一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] }

3 个答案:

答案 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函数

https://lodash.com/docs/4.17.3#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);