如何使用数组对象的键将多个属性添加到ES6中的子对象?
我有这个:
const data = [{
id: 'abc-test',
},
{
id: 'xyz-test',
},
];
const t = {
a: {
filters: {
tOne: [],
}
}
};
结果应如下所示:
const t = {
a: {
filters: {
tOne: [],
'abc-test': [],
'xyz-test': [],
}
}
};
我尝试过的
...data.map((el) => [el.id]),
如何解决?我知道可以通过使用.forEach来完成,但是我想尽可能使用另一个ES6 Array.prototype函数。
答案 0 :(得分:1)
我将结合使用reduce
和散布运算符。
const data = [{
id: 'abc-test',
},
{
id: 'xyz-test',
},
];
const t = {
a: {
filters: {
tOne: [],
}
}
};
const newKeys = data.reduce((acc, el) => {
acc[el.id] = [];
return acc;
}, {});
t.a.filters = {
...t.a.filters,
...newKeys
};
console.log(t);
答案 1 :(得分:1)
forEach
是一个Array
函数(或者您喜欢称之为:Array.prototype
函数)。在所有其他Array函数中,forEach
最适合您的需求。其他的还有其他用途。
因此,只需使用forEach
遍历数组中的对象并将属性直接分配给t.a.filters
:
data.forEach(o => t.a.filters[o.id] = []);
示例:
const data = [ { id: 'abc-test' }, { id: 'xyz-test' } ];
const t = { a: { filters: { tOne: [] } } };
data.forEach(o => t.a.filters[o.id] = []);
console.log(t);