我有一个包含多个对象的数组.这些对象还包含如下对象的数组:
const data =
[
{
id: 1, name: "Jack", interests:
[
{id: 9, name: "basketball"},
{id: 8, name: "art"}
]
},
{
id: 2, name: "Jenny", interests:
[
{id: 7, name: "reading"},
{id: 6, name: "running"}
]
}
];
Run Code Online (Sandbox Code Playgroud)
我想将两个兴趣数组推入一个新的数组,如下所示:
newArray =
[
[{id: 9, name: "basketball"}, {id: 8, name: "art"}],
[{id: 7, name: "reading"},{id: 6, name: "running"}]
];
Run Code Online (Sandbox Code Playgroud)
这会将数据推送到新数组,但数据不会以这种方式嵌套:
data.map(v => { v.interests.map(x => { newArray.push({name: x.name, id:x.id}) }) })
Run Code Online (Sandbox Code Playgroud)
如何在保持嵌套结构的同时将兴趣数据推送到新阵列?
Cer*_*nce 12
只是.map在interests每个项目:
const data=[{id:1,name:"Jack",interests:[{id:9,name:"basketball"},{id:8,name:"art"}]},{id:2,name:"Jenny",interests:[{id:7,name:"reading"},{id:6,name:"running"}]}]
const mapped = data.map(({ interests }) => interests);
console.log(mapped);Run Code Online (Sandbox Code Playgroud)
映射时,您不希望使用push预先创建的新数组; 相反,你想return为每个新的数组项使用(或使用箭头函数的隐式返回).(你目前使用的.map是forEach)
如果你不想只是映射interests数组并且也需要转换对象,那么它会更复杂一些; 你也必须使用嵌套map:
const data=[{id:1,name:"Jack",interests:[{id:9,name:"basketball",foo:'bar'},{id:8,name:"art",foo:'bar'}]},{id:2,name:"Jenny",interests:[{id:7,name:"reading",foo:'bar'},{id:6,name:"running",foo:'bar'}]}]
const mapped = data.map(({ interests }) =>
// Use only `id` and `foo` properties, discard the `name`s:
interests.map(({ id, foo }) => ({ id, foo }))
);
console.log(mapped);Run Code Online (Sandbox Code Playgroud)