2017-03-22 19 views
-1

でアレイによるグループ私は、これは配列をJS持っている -JS - 配列

var temp1 = [{name: 'john', ids: [2,4,5]}, 
{name: 'james', ids: [2]}, 
{name: 'adam', ids: [5,2]}] 

そして、私はにグループそれにそれをしたい -

{ 
    2: [{name: 'john'}, {name: 'james'}, {name: 'adam'}], 
    4: [{name: 'john'}], 
    5: [{name: 'john'},{name: 'adam'}] 
} 

は、誰かがそれで私を助けることができますか?

+0

あなたは何をしようとしたことがありますか? –

+0

私は次のようなものを試しました:_.groupBy(temp1、x => x.CategoryIds) –

答えて

4

var input = [{name: 'john', ids: [2,4,5]}, 
 
{name: 'james', ids: [2]}, 
 
{name: 'adam', ids: [5,2]}] 
 

 
var output = input.reduce(function(a,c) { 
 
    return c.ids.reduce(function(a,v) { 
 
    (a[v] || (a[v] = [])).push({name: c.name}) 
 
    return a 
 
    }, a) 
 
}, {}) 
 

 
console.log(output)

0

var x = [{name: 'john', ids: [2,4,5]}, 
 
{name: 'james', ids: [2]}, 
 
{name: 'adam', ids: [5,2]}]; 
 

 
var newObj = {}; 
 
for(i=0;i<x.length;i++) { 
 
    for(j=0;j<x[i].ids.length;j++) { 
 
    newObj[x[i].ids[j]] = newObj[x[i].ids[j]] || []; 
 
    newObj[x[i].ids[j]].push({'name': x[i].name}); 
 
    } 
 
} 
 

 
console.log(newObj);

この

0

var arr = [{name: 'john', ids: [2,4,5]},{name: 'james', ids: [2]},{name: 'adam', ids: [5,2]}], 
 
    obj = {}; 
 
    arr.forEach(function(v){ 
 
     v.ids.forEach(function(c){ 
 
     if (!obj[c]) { 
 
      var arr = []; 
 
      arr.push({name: v.name}); 
 
      obj[c] = arr; 
 
     } else { 
 
      obj[c].push({name: v.name}); 
 
     } 
 
     }) 
 
    }); 
 
    
 
    console.log(obj);

をお試しください
0

Arrayの高次関数reduceを使用します。

function convertArr(arr) { 
    if(arr !== undefined && arr.length) { 
    var i = 0; 
    var newObj = arr.reduce(function(obj, item){ 
     var ids = item.ids; 
     var id; 
     for(i = 0; i < ids.length; i++) { 
     id = ids[i]; 
     if(obj[id] === undefined) { 
      obj[id] = []; 
      obj[id].push({name: item.name}); 
     } else { 
      obj[id].push({name: item.name}); 
     } 
     } 
     return obj; 
    }, {}); 
} 
console.log(JSON.stringify(newObj)); 
alert(JSON.stringify(newObj)); 
} 
var temp1 = [{name: 'john', ids: [2,4,5]}, 
{name: 'james', ids: [2]}, 
{name: 'adam', ids: [5,2]}]; 

convertArr(temp1); 

function convertArr(arr) { 
 
\t if(arr !== undefined && arr.length) { 
 
    \t  var i = 0; 
 
     var newObj = arr.reduce(function(obj, item){ 
 
      var ids = item.ids; 
 
      var id; 
 
      for(i = 0; i < ids.length; i++) { 
 
      id = ids[i]; 
 
      if(obj[id] === undefined) { 
 
     \t obj[id] = []; 
 
       obj[id].push({name: item.name}); 
 
      } else { 
 
     \t obj[id].push({name: item.name}); 
 
      } 
 
      } 
 
      return obj; 
 
     }, {}); 
 
    } 
 
    console.log(JSON.stringify(newObj)); 
 
    alert(JSON.stringify(newObj)); 
 
    } 
 
    var temp1 = [{name: 'john', ids: [2,4,5]}, 
 
    {name: 'james', ids: [2]}, 
 
    {name: 'adam', ids: [5,2]}]; 
 

 
    convertArr(temp1);