Javascript 使用数组属性展平复杂对象数组

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

我想知道是否有一个快速的解决方案(例如使用map()将多维数组转换为一维数组),它仍然保留原始数组的所有信息

你可以用一些循环来解决它,但我认为一定有一个更聪明的解决方案

下面是一个例子来进一步解释:

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。请参阅更新。