2017-10-26 11 views
-4

두 개의 배열이 있다고 상상해보십시오. 각각 다른 유형의 객체를 포함합니다. 당신은 그냥 두 번째 배열에서 값을 할당 할 볼 수 있듯이두 개의 다른 형식 배열에서 개체를 병합

let first: Foo[] = [ 
    { a: 12, b: 'x', c: 11 }, 
    { a: 43, b: 'y', c: 15 } 
]; 

예를 들어 :

let first: Foo[] = [ 
    { a: 12, b: 'x', c: 0 }, 
    { a: 43, b: 'y', c: 0 } 
]; 

let second: number[] = [11, 15]; 

내가 마지막으로 하나 개의 배열을 얻을 수있는 방법으로 그들의 개체를 병합하려는은 다음과 같습니다 ~ c 첫 번째 배열의 개체 속성

문제에 대한 나의 설명을 이해하시기 바랍니다. 나는 너의 기술을 믿어, 얘들 아!

+1

당신은 아직 아무것도 시도? – TKoL

+1

나만이나이 질문은 적어도 두 시간에 한 번씩 게시됩니까? – sjahan

+0

@sjahan 적어도 하나의 중복을 제공해주십시오. 감사하겠습니다. – mankers

답변

1

당신이 두 개의 배열을 zip 수 ... 매우 간단합니다 하나에,

const first: Foo[] = [ 
    { a: 12, b: 'x', c: 0 }, 
    { a: 43, b: 'y', c: 0 } 
]; 

const second: number[] = [11, 15]; 

const result: Foo[] = first.map((e, i) => { 
    return <Foo>Object.assign({}, e, { c: second[i] }); 
}); 
+0

당신의 솔루션은 훌륭하게 작동합니다! 정말 고맙습니다. – mankers

+0

이 솔루션은 간단하고 작동합니다. 그러나 다음 번에 한 번만 "b"또는 "a"에 지퍼를 걸거나 런타임시 일반적이기 때문에 모르는 핵심 키가 있으면 어떻게됩니까? –

-1

난 당신이 어쩌면 최선을 ...이 같은 을 그렇게해야한다고 생각하지만, 작동해야하는 경우 : 이것은

for(var i in second){ 
    var elem = second[i]; 
    first[i]['c'] = elem; 
} 
0

은 너무 자주, Array.prototype.reduce는 예를 들어 같은 접근 방식에 대한 좋은 기반을 제공합니다 이 하나 ...

var listOfItems = [ 
 
    { a: 12, b: 'x', c: 0 }, 
 
    { a: 43, b: 'y', c: 0 } 
 
]; 
 
var listOfValues = [11, 15]; 
 

 

 
function reassignValueToGivenKey(collector, item, idx) { 
 
    item = Object.assign({}, item); // do not mutate original reference. 
 
    item[collector.key] = collector.valueList[idx]; // reassign value. 
 
    collector.itemList.push(item); // collect processed items separately. 
 
    return collector; 
 
} 
 

 
var result = listOfItems.reduce(reassignValueToGivenKey, { 
 

 
    key: 'c', 
 
    valueList: listOfValues, 
 
    itemList: [] 
 
    
 
}).itemList; 
 

 
console.log('listOfItems : ', listOfItems); 
 
console.log('result : ', result);
.as-console-wrapper { max-height: 100%!important; top: 0; }