2017-12-23 28 views
0

Javascript Array에서 중복 객체를 제거하려고합니다.하나의 배열에 공통 객체를 추가하고 중복을 제거하십시오.

나는이

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 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" 
    } 
    } 
] 

같은 객체 배열에"정보 ", 무언가를 결합하는 것을 시도하고있다 "개체, 잘 작동 Lodash 함께 노력했다 JSFIDDLE

누구든지 실제 개체에서 예상되는 개체를 달성하는 데 도움이 될 수 있습니다. 비슷한 id 값을 가진 하나의 객체로 결합하여 예상 객체를 생성하려고합니다.

+1

가능한 복제 [방법 그룹 키를 기준으로 객체의 배열 (https://stackoverflow.com/questions/40774697/how-to -group-of-objects-by-key) – Andreas

답변

1

이 lodash _.groupBy()를 사용하여 같은 id, 다음 _.map() 바이 항목 그룹을 요청 된 형식으로 변환하고 _.omit()을 사용하여 정보없이 기본 객체를 가져오고 _.map()을 사용하여 info의 배열을 얻습니다. 하나의 객체가 _.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); 
     } 
    } 
} 

중복 된 오브젝트 이름 및 부서와 같은 다른 속성에 의해 식별 /있는 경우도 후 바로 업데이트 할 경우 조건

if (o.id === b.id && o.name === b.name && o.dept === b.dept)