2016-08-18 80 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函數(映射一個陣列的元素以使用給定的映射函數的新數組)最簡單的方法。然後,您可以重新使用ab,並從原來的對象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);