2016-10-18 5 views
1

다음과 같은 개체 배열이 있습니다. 그리고 그들은 복제 한 재산 '연락처 이름'값밑줄로 개체 배열 병합

나는이

[ 
    { 
     categoryId: 1, 
     categoryName: "Default", 
     contactId: 141, 
     contactName: "Anonymous", 
     names: { 
      1: "Mobile", 
      2: "Email", 
      3: "Email" 
     }, 
     values: { 
      1: '+2234324', 
      2: "[email protected]", 
      3: "[email protected]" 
     } 
    } 
]; 

편집처럼 뭔가에 '연락처 이름' 속성의 이름으로 하나의 객체로 병합 할

[ { categoryId:1 categoryName:"Default" contactId:141 contactName:"Anonymous" name:"Mobile" value:"+4417087654" }, { categoryId:1 categoryName:"Default" contactId:325 contactName:"Anonymous" name:"Email" value:"[email protected]" }, { categoryId:1 categoryName:"Default" contactId:333 contactName:"Anonymous" name:"Email" value:"[email protected]" } ] 

: 어떻게 개체도 categoryName까지 그룹화합니까?

+0

내부 배열의 또 다른 변형 ..? – Redu

+0

다른 'contactId'를 버리는 것 같습니다. 그게 의도적 인거야? – Oberon

+0

contactId는 어떻게됩니까? – shanks

답변

2
var grouped = _.groupBy(input, 'contactName'); 
var output = _.map(grouped, function(entries) { 
    return _.extend(
    _.pick(entries[0], 'categoryId', 'categoryName', 'contactId', 'contactName'), 
    { 
     names: _.indexBy(_.pluck(entries, 'name'), function(val, index) { return index +1; }), 
     values: _.indexBy(_.pluck(entries, 'value'), function(val, index) { return index +1; }) 
    } 
); 
}); 

https://jsfiddle.net/f1x4tscu/3/

1

객체

var grouped = _.groupBy(this.contacts, 'contactName'); 
var output = _.map(grouped, function (entries) { 
    return _.extend(
     _.pick(entries[0], 'categoryId', 'categoryName', 'contactId', 'contactName'), 
     { 
      addresses: _.map(entries, function (m) { 
       return { 
        name: m.name, 
        value: m.value 
       } 
      }), 
     } 
    ); 
}); 
당신은 바로 첫 번째의`contactId` 값을 유지하려면