2017-12-23 26 views
0

Javascript配列から重複するオブジェクトを削除しようとしています。共通オブジェクトを1つの配列に追加して重複を削除します

私はインフォ」で重複を削除し、オブジェクトの配列に「情報」を組み合わせて、同じ値でこの

var expectedObj = [ 
    { 
    "name": "Sam", 
    "id": "1", 
    "dept": "Inventory", 
    "info": [ 
     { 
     "key1": "test1", 
     "key2": "test2", 
     "key3": "test3" 
     }, 
     { 
     "key4": "test4", 
     "key5": "test5", 
     "key6": "test6" 
     } 
    ] 
    }, 
    { 
    "name": "Paul", 
    "id": "2", 
    "dept": "Inventory", 
    "info": { 
     "key1": "test1", 
     "key2": "test2", 
     "key3": "test3" 
    } 
    } 
] 

のようなものにしようとしています。この

var actualObj = [ 
    { 
    "name": "Sam", 
    "id": "1", 
    "dept": "Inventory", 
    "info": { 
     "key1": "test1", 
     "key2": "test2", 
     "key3": "test3" 
    } 
    }, 
    { 
    "name": "Paul", 
    "id": "2", 
    "dept": "Inventory", 
    "info": { 
     "key1": "test1", 
     "key2": "test2", 
     "key3": "test3" 
    } 
    }, 
    { 
    "name": "Sam", 
    "id": "1", 
    "dept": "Inventory", 
    "info": { 
     "key4": "test4", 
     "key5": "test5", 
     "key6": "test6" 
    } 
    } 
] 

のような物を持っています"オブジェクト、私はうまく動作するLodashで試したJSFIDDLE

実際のオブジェクトから期待されるオブジェクトを達成するのに助けてくれる人は誰でも助けてください。私は、類似のid値を持つ1つのオブジェクトとしてCombiningによって期待されるオブジェクトを作成しようとしています。

+1

(https://stackoverflow.com/questions/40774697/how-to [どのキーでグループオブジェクトの配列へ]の可能な重複-group-an-object-by-key) – Andreas

答えて

1

_.map()ようであれば条件を更新名およびdeptのようないくつかの他のプロパティによって識別されている/ある場合情報を持たない基本オブジェクトを取得するために_.omit()を使用し、infoの配列を取得するために_.map()を使用して、要求されたフォーマットにグループを追加します。 _.assign()を使用して単一のオブジェクトに結合する:

var actualObj = [{"name":"Sam","id":"1","dept":"Inventory","info":{"key1":"test1","key2":"test2","key3":"test3"}},{"name":"Paul","id":"2","dept":"Inventory","info":{"key1":"test1","key2":"test2","key3":"test3"}},{"name":"Sam","id":"1","dept":"Inventory","info":{"key4":"test4","key5":"test5","key6":"test6"}}]; 
 

 
var result = _(actualObj) 
 
    .groupBy('id') 
 
    .map(function(group) { 
 
    return _.assign(_.omit(group[0], 'info'), { 
 
     info: _.map(group, 'info') 
 
    }); 
 
    }) 
 
    .value(); 
 
    
 
console.log(result); 
 
    
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1

あなたはこれを試してもよいでしょう、それがあなたのために働くことを願ってください。

for(let i = 0; i < actualObj.length; i++) { 
    let o = actualObj[i]; 
    for(let j = i+1; j < actualObj.length; j++) { 
     let b = actualObj[j]; 
     // dublicate object identified by id 
     if (o.id === b.id) { 
      const info = []; 
      info.push(o.info); 
      info.push(b.info); 
      o.info = info; 
      actualObj.splice(j, 1); 
     } 
    } 
} 

あなたの重複したオブジェクトは、その後、ちょうどその

idによってlodash、 _.groupBy()アイテムを使用して
if (o.id === b.id && o.name === b.name && o.dept === b.dept) 
関連する問題