2016-08-18 2 views
0

는 객체의 값이 배열의 요소를 기반으로하는 객체의 단순 배열을 생성해야합니다객체 내부의 배열을 기반으로 한 새로운 객체 배열?

var obj = { 
    a: 1, 
    b: 'x', 
    c: 'z', 
    d: ['rr', 'qq'] 
}; 

var rec = []; 

obj.d.forEach(function(e, i) { 
    rec.push({ 
    d: e 
    }) 
}); 

console.log(rec); 

그러나 물론 이것은 단지 나에게 도착

이에 도착하는 방법
[ { d: 'rr' }, { d: 'qq' } ] 

객체의 새로운 배열? ->

[ { a: 1, 
    b: 'x', 
    c: 'z', 
    d: 'rr' }, 
    { a: 1, 
    b: 'x', 
    c: 'z', 
    d: 'qq' } ] 
+0

내가 제대로 이해하는 경우 : 그러나 많은 배열 요소에 대한 새로운 배열 – sqldoug

답변

4

(주어진 매핑 기능을 사용하여 새 배열 한 배열의 요소를 매핑)을 map 기능을 사용하는 것입니다 원하는 결과를 얻을 수있는 가장 쉬운 방법. 매핑 함수 매개 변수에서 a, b, 원래 개체에서 cd을 사용하여 다시 그런 다음 새 개체를 만들 수 있습니다 :

var rec = obj.d.map(function(r) { 
    return { 
    a: obj.a, 
    b: obj.b, 
    c: obj.c, 
    d: r 
    }; 
}); 
+3

하시기 바랍니다 내에서 새로운 객체는 –

+0

정말 고마워요 답을 설명 - - 나는 그것이되어야한다고 생각한다.); 결국? – sqldoug

1
obj.d.forEach(function(e) { 
    var item = {}; 

    Object.keys(obj).forEach(function(key) { 
     item[key] = obj[key]; 
    }); 

    item.d = e; 

    rec.push(item); 
}); 

그러나 속성이 A, B, C는 객체가 될 수 없습니다. 그렇지 않으면 rec 배열의 각 항목에 동일한 참조가 있습니다.

0

다른 방법이 작동하지만, 그것은 아주 못생긴 :

var o = { 
    a: 1, 
    b: 'x', 
    c: 'z', 
    d: ['rr', 'qq'] 
}; 

var arr = []; 

Object.keys(o).forEach(function(k) { 
    var val = o[k]; 
    if (Array.isArray(val)) { 
     val.forEach(function(j) { 
     arr.push({[k] : j}); 
     }); 
    } 
}); 

arr.forEach(function(obj) { 
    for (var p in o) { 
     var val = o[p]; 
     if (!Array.isArray(val)) { 
     obj[p] = val 
     } 
    } 
}); 

console.log(arr); 
관련 문제