如何将嵌套在对象数组中的嵌套数组的数据推送到一个新数组中?同时保持其嵌套结构。

8

我有一个包含多个对象的数组。这些对象也包含对象的数组,如下所示:

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"}
            ]
        }
    ];

我希望将两个兴趣数组推入一个新数组中,如下所示:
newArray = 
    [
        [{id: 9, name: "basketball"}, {id: 8, name: "art"}],
        [{id: 7, name: "reading"},{id: 6, name: "running"}]
    ];

这将数据推送到新数组中,但这种方式不再嵌套数据:
data.map(v => { v.interests.map(x => { newArray.push({name: x.name, id:x.id}) }) })

如何将嵌套结构的兴趣数据推送到新数组中?
1个回答

12

只需对每个项目的 interests 进行 .map 处理:

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);

当进行映射时,不要使用先前创建的新数组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);


谢谢,我明白了。如果你想选择在新数组中返回哪些属性怎么办?现在只有两个属性,名称和ID,但可能还有更多。我可能不想返回所有属性。 - Vincent
可能更清晰的做法是 data.map((person) => person.interests),或者你从使用的语法中获得了一些东西,也许我不知道? - Tibrogargan
在我看来,解构通常更可取。如果你只需要对象的特定属性,而不需要整个对象,那么通常最好将该属性提取为变量,而不是声明一个对象并继续仅使用对象的一个属性。 - CertainPerformance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接