2017-10-26 6 views
-1

비슷한 구조의 객체를 포함하는 객체 배열이 있습니다. 배열의 모든 객체에 새 키 값 쌍을 추가해야합니다. 루프를 사용하지 않고 을 어떻게 할 수 있습니까? 전체 배열. 거의 없거나 전혀없는 성공을 확산 연산자를 사용하여 시도 : P.S이반복하지 않고 객체 배열의 모든 객체에 새 키 - 값 쌍 삽입

//arr2 = [ {a:1,b:2,c:3}, {a:2,b:3,c:3}] 

처럼 내가 필요로하는 출력의 예를 제공

,

let arr = [{a:1,b:2}, {a:2,b:3}]; 
let key = c; 
let value = 3; 

필수 출력됩니다.

+3

* 전체 배열을 반복하지 않고 어떻게 할 수 있습니까? ** 반복 없음 **이 필요한 이유는 무엇입니까? – gurvinder372

+0

'arr [0] .c = el.c; arr [1] .c ...' – Teemu

+0

@ Teemu 당신은 여전히 ​​모든 인덱스를 반복 할 것입니다, 그렇죠? – Yash

답변

1

전체 배열을 반복하지 않고 어떻게 처리 할 수 ​​있습니까?

(합리적으로) 할 수 없습니다. 완전히 불합리한 방법은 모든 개체에 의해 상속되는 Object.prototype에 추가하는 것이므로 배열   — 및 그 밖의 다른 모든 개체에 추가됩니다.

다시 : 당신은 합리적으로, 당신은 하나의 형태 또는 다른 형태로 반복 할 필요가 없습니다. 그 루프는 재귀 함수 프로그래밍 일 수도 있지만 기본적으로 여전히 루프입니다.

let arr = [{a:1,b:2}, {a:2,b:3}]; 
 
let el = {c:3}; 
 
(function go(a, i, e) { 
 
    if (i < a.length) { 
 
     a[i].c = e.c; 
 
     go(a, i + 1, e); 
 
    } 
 
})(arr, 0, el); 
 
console.log(arr);
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
}

+0

객체 프로토 타입에 키 값을 추가하는 것에 대해 좀 더 구체적으로 설명 할 수 있습니까? –

+0

@DanPhilip 당신은'Object.prototype.c = 3'을 그냥 할 것입니다.하지만 그건 전혀 좋은 생각이 아니지만, 객체를 상속 받아 상속 된 프로토 타입에 추가 할 수는 있습니다. 하지만 배열 구조가 똑같지는 않을 것입니다. – Keith

+0

@ DanPhilip : 당신은 ** 정말로, 정말로, 그렇게하고 싶지 않습니다 **. 하지만 그렇게했다면 키스가 보여준 방식대로하고 싶지 않을 것입니다. 대신 Object.defineProperty (Object.prototype, "c", {value : el.c});'(그래서 열거 가능하지 않습니다.) 하지만 당신은 ** 정말로, 정말로, 그렇게하고 싶지 않습니다 **. :-) –

1

당신이 추가 할 배열지도() 연산자와 Object.assign()를 사용할 수 있습니다 여기에

는 재귀 기술적으로하지-A 루프 방법 키, 값 쌍
let arr = [{a:1,b:2}, {a:2,b:3}]; 
 
let finalArray = arr.map(function(obj){return Object.assign(obj,{c:3});}) 
 
console.log(finalArray);

+0

@PraveenKumarD 그러나'.map()'은 배열을 반복 할 것입니다. OP는 루프가없는 솔루션을 원합니다. – abhishekkannojia