2016-08-18 7 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

(所与のマッピング関数を使用して新しいアレイ1つの配列の要素をマッピング)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); 
}); 

しかし性質は、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); 
関連する問題