需要根据作为对象值的数组元素创建浅层对象:
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 :(得分:4)
获得所需结果的最简单方法是使用map
函数(使用给定的映射函数将一个数组的元素映射到一个新数组)。然后,您可以使用原始对象中的a
,b
和c
以及映射函数参数中的d
重新创建新对象:
var rec = obj.d.map(function(r) {
return {
a: obj.a,
b: obj.b,
c: obj.c,
d: r
};
});
答案 1 :(得分: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数组中的每个项都将具有相同的引用。
答案 2 :(得分: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);