2017-09-21 6 views
0

나는 결과가Underscore.js를 사용하여 uniq 값으로 배열을 병합하는 방법은 무엇입니까?

[ 
    { 'name': 'a' }, 
    { 'name': 'b' }, 
    { 'name': 'c' }, 
    { 'name': 'd' }, 
    { 'name': 'e' } 
] 

처럼되고 싶어하지만, 반복 _.map()를 사용하여 병합 후 _.union() 또는 기타를 사용하여 변환 첫 번째 배열처럼 확인하고 싶지 않은 두 배열

a= [{ name: 'a', name: 'b' }] 
b= [c, d, b, e] 

처럼 한 경우 그런 다음 _.uniq()을 입력 한 다음 가능한 경우 모두 필요하고 짧은 레이어로 만듭니다.

+1

하나의 동일한 키만 사용하여 올바른 데이터를 추가하십시오. –

+0

아니요, 저는 그와 같은 데이터를 가지고 있으며 병합 할 필요가 있습니다. – VjyV

+2

아니야. 시도해도 두 속성이 아니라 마지막 값을 얻습니다. –

답변

0

Backbone.Collection에서이를 수행하려면 model parse function을 활용하고 인스턴스화시 parse: true 옵션을 제공 할 수 있습니다. model idAttribute을 지정하면 중복 모델을 피할 수 있습니다. 참고 : 일부 유형 검사 및 배열 병합을 위해 여기 lodash를 사용했습니다.

var a = [{name: 'a'}, {name: 'b'}]; 
var b = ['c', 'd', 'b', 'e']; 
var Coll = Backbone.Collection.extend({ 
    model: Backbone.Model.extend({ 
    idAttribute: 'name', 
    parse: function(resp, opts) { 
     var modelData = resp; 
     if (_.isString(resp)) { 
     modelData = { name: resp }; 
     } 
     return modelData; 
    } 
    }) 
}); 
// then on initialize 
var data = _.union(a, b); 
var coll = new Coll(data, {parse: true}); 
console.log(JSON.stringify(coll.toJSON())); 
// yields 
"[{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"},{"name":"e"}]" 

// alternatively, you can choose not merge the data to start 
// and instead either pass some at initialize and then 
// some with a coll.set later, or all with set 
// Note: set call still needs parse:true as well as remove:false 
var coll = new Coll(a, {parse: true}); 
coll.set(b, {parse: true, remove: false}); 
console.log(JSON.stringify(coll.toJSON())); 
// yields 
"[{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"},{"name":"e"}]"