[英]New array of objects based on an array inside an object?
需要基於作為對象值的數組元素創建對象的淺層數組:
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' } ]
獲得期望結果的最簡單方法是使用map
函數(使用給定的映射函數將一個數組的元素映射到新數組)。 然后,可以使用原始對象的a
, b
和c
以及映射函數參數的d
來創建新對象:
var rec = obj.d.map(function(r) {
return {
a: obj.a,
b: obj.b,
c: obj.c,
d: r
};
});
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數組中的每個項目都將具有相同的引用。
或者,這可行,但是非常難看:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.