[英]push the array value to object
I have a nested array.我有一个嵌套数组。 I want to take values from array and push to new single object.
我想从数组中获取值并推送到新的单个 object。 should read take the _id as object key and category array field should be value for _id
应该读取 _id 作为 object 键和类别数组字段应该是 _id 的值
const Ll = [
{
_id: 'milk',
category: [
[
{
name: 'Alfred',
job: 'manager'
},
{
name: 'Mark',
job: 'manager'
}
]
]
},
{
_id: 'grocery',
category: [
[
{
name: 'William',
job: 'manager'
}
]
]
}
]
I want object like so,我想要这样的 object,
const obj = {
milk: [
{
name: 'Alfred',
job: 'manager'
},
{
name: 'Mark',
job: 'manager'
}
],
grocery: [
{
name: 'William',
job: 'manager'
}
]
}
Is possible to do Thanks!可以吗 谢谢!
You could do it using Array.prototype.reduce()
method.你可以使用
Array.prototype.reduce()
方法来做到这一点。 Traverse the array and group it by _id
.遍历数组并按
_id
对其进行分组。
const data = [ { _id: 'milk', category: [ [ { name: 'Alfred', job: 'manager', }, ], ], }, { _id: 'grocery', category: [ [ { name: 'William', job: 'manager', }, ], ], }, { _id: 'milk', category: [ [ { name: 'Mark', job: 'manager', }, ], ], }, ]; const ret = data.reduce((prev, c) => { const p = prev; const key = c._id; p[key] = p[key]?? []; p[key].push(...c.category.flat()); return p; }, {}); console.log(ret);
ES6: ES6:
const data = [ { _id: 'milk', category: [ [ { name: 'Alfred', job: 'manager', }, ], ], }, { _id: 'grocery', category: [ [ { name: 'William', job: 'manager', }, ], ], }, { _id: 'milk', category: [ [ { name: 'Mark', job: 'manager', }, ], ], }, ]; const ret = data.reduce((prev, c) => { const p = prev; const key = c._id; p[key] = p[key] || []; p[key].push(...c.category.reduce((acc, val) => acc.concat(val), [])); return p; }, {}); console.log(ret);
You could use reduce
with empty object accumulated您可以使用
reduce
和空 object 累积
Technique combined with:技术结合:
[_id]: category
[_id]: category
(acc, { _id, category })
as well as ({...acc})
(acc, { _id, category })
以及({...acc})
const data = [ { _id: "milk", category: [ [ { name: "Alfred", job: "manager", }, { name: "Mark", job: "manager", }, ], ], }, { _id: "grocery", category: [ [ { name: "William", job: "manager", }, ], ], }, ]; const res = data.reduce( (acc, { _id, category }) => ({...acc, [_id]: category.flat() }), {} ); console.log(res);
Here is solution for you.这是给你的解决方案。
const obj = {};
data.forEach(d => {
const categories = d.category.reduce((a, v) => a.concat(v), []);
obj[d._id] = obj[d._id] ? [...obj[d._id], ...categories] : [...categories];
});
console.log(obj);
const keys = [...new Set(data.map(item => item._id))];
const newObj = keys.reduce((acc, curr) => {
const value = data.filter(({ _id }) => _id === curr).map(({ category }) => {
return {
...category[0][0]
}
});
return {
...acc,
[curr]: value
}
}, {});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.