Javascript 使用数组属性展平复杂对象数组
我想知道是否有一个快速的解决方案(例如使用map()将多维数组转换为一维数组),它仍然保留原始数组的所有信息 你可以用一些循环来解决它,但我认为一定有一个更聪明的解决方案 下面是一个例子来进一步解释:Javascript 使用数组属性展平复杂对象数组,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,我想知道是否有一个快速的解决方案(例如使用map()将多维数组转换为一维数组),它仍然保留原始数组的所有信息 你可以用一些循环来解决它,但我认为一定有一个更聪明的解决方案 下面是一个例子来进一步解释: const arr = [{ id: 1, people: [ {name: "x", surname: "x"}, {name: "y", surname: "y"} ] },{ id: 2, people: [ {name: "a", surnam
const arr = [{
id: 1,
people: [
{name: "x", surname: "x"},
{name: "y", surname: "y"}
]
},{
id: 2,
people: [
{name: "a", surname: "a"},
{name: "b", surname: "b"}
]
}]
const result = [
{id: 1, name: "x", surname: "x"},
{id: 1, name: "y", surname: "y"},
{id: 2, name: "a", surname: "a"},
{id: 2, name: "b", surname: "b"}
]
将Array.flatMap()
与内部Array.map()
一起使用,以添加id
:
const arr=[{“id”:1,“people”:[{“name”:“x”,“姓氏”:“x”},{“name”:“y”,“姓氏”:“y”},{“id”:2,“people”:[{“name”:“a”,“姓氏”:“a”},{“name”:“b”,“姓氏”:“b”}]
const result=arr.flatMap(({id,people})=>people.map(p=>({id,…p})))
console.log(result)
使用带有内部Array.map()的Array.flatMap()
来添加id
:
const arr=[{“id”:1,“people”:[{“name”:“x”,“姓氏”:“x”},{“name”:“y”,“姓氏”:“y”},{“id”:2,“people”:[{“name”:“a”,“姓氏”:“a”},{“name”:“b”,“姓氏”:“b”}]
const result=arr.flatMap(({id,people})=>people.map(p=>({id,…p})))
console.log(结果)
您可以尝试使用map()
和flat()
const arr=[{
id:1,
人民:[
{姓名:“x”,姓氏:“x”},
{姓名:“y”,姓氏:“y”}
]
},{
id:2,
人民:[
{姓名:“a”,姓氏:“a”},
{姓名:“b”,姓氏:“b”}
]
}]
const result=arr.map(p=>{
返回p.people.map(pi=>Object.assign(pi,{id:p.id}));
}).flat();
控制台日志(结果)代码>您可以尝试使用map()
和flat()
const arr=[{
id:1,
人民:[
{姓名:“x”,姓氏:“x”},
{姓名:“y”,姓氏:“y”}
]
},{
id:2,
人民:[
{姓名:“a”,姓氏:“a”},
{姓名:“b”,姓氏:“b”}
]
}]
const result=arr.map(p=>{
返回p.people.map(pi=>Object.assign(pi,{id:p.id}));
}).flat();
控制台日志(结果)
您可以使用数组。reduce
为每个人
创建多个条目,假设数组从不改变其形式。
关于它如何工作的更多注释直接在代码中
const arr=[{
id:1,
人民:[
{姓名:“x”,姓氏:“x”},
{姓名:“y”,姓氏:“y”}
]
},{
id:2,
人民:[
{姓名:“a”,姓氏:“a”},
{姓名:“b”,姓氏:“b”}
]
}]
//减少原始数组。
const r=arr.reduce((acc,{id,people})=>{
//对于每个人,将一个新的elemen推到阵列中。
return people.forEach(\u people=>{
//推送的元素将保存当前循环的[people]项的[id]和所有属性。
acc.push(Object.assign({id},_people));
}),acc;//您可以使用数组。reduce
为每个人创建多个条目,前提是数组从不改变其形式。
关于它如何工作的更多注释直接在代码中
const arr=[{
id:1,
人民:[
{姓名:“x”,姓氏:“x”},
{姓名:“y”,姓氏:“y”}
]
},{
id:2,
人民:[
{姓名:“a”,姓氏:“a”},
{姓名:“b”,姓氏:“b”}
]
}]
//减少原始数组。
const r=arr.reduce((acc,{id,people})=>{
//对于每个人,将一个新的elemen推到阵列中。
return people.forEach(\u people=>{
//推送的元素将保存当前循环的[people]项的[id]和所有属性。
acc.push(Object.assign({id},_people));
}),acc;//是否有一种聪明的方法可以将id
添加到数组中的每个对象?flatMap()是正确的想法,但id
字段丢失了。没有找到。您只需要映射人员,并添加id。请参阅更新。是否有一种聪明的方法可以将id
添加到数组中的每个对象?flatMap()正确的人是否认为,id
字段丢失。没有找到。您只需要映射人员,并添加id。请参阅更新。