在嵌套的对象数组中查找数组

4

我想在嵌套的对象数组中查找一个数组,该怎么做?

这是我的数组:

const arr = [
    {
        "teamA": [
            {
                "_id": "5fcb57c5a1a426c03bcfd25f",
                "level": 10,
                "username": "asaf"
            }
        ],
        "teamB": [],
        "options": {}
    },
    {
        "teamA": [
            {
                "_id": "a7fgy3h1uio",
                "level": 10,
                "username": "asaf"
            }
        ],
        "teamB": [
            {
                "_id": "13rfedsc32",
                "level": 10,
                "username": "asaf"
            },
            {
                "_id": "dghg453r3q",
                "level": 10,
                "username": "asaf"
            }
        ],
        "options": {}
    }
];

现在我想创建一个函数,通过 _id 返回球员所在队伍的数组。

例如,我创建了以下代码:

const findTeam = playerId => {
    const match = arr.find(({ teamA, teamB }) => [teamA, teamB].some(team => team.some(i => i._id == playerId)));
    if(!match) return;

    const { teamA, teamB } = match;
    const team = [teamA, teamB].find(team => team.some(i => i._id == playerId));
    return team;
};

我的代码现在可以运行,但是我写的方式看起来很凌乱,有没有更好的方法呢? 谢谢!


1
每个数组对象只有两个团队 - TeamA 和 TeamB 吗? - baymax
@baymax 是的,正确的。 - Asaf
1个回答

4
你可以使用 flatMap 方法:

const arr = [{teamA:[{_id:"5fcb57c5a1a426c03bcfd25f",level:10,username:"asaf"}],teamB:[],options:{}},{teamA:[{_id:"a7fgy3h1uio",level:10,username:"asaf"}],teamB:[{_id:"13rfedsc32",level:10,username:"asaf"},{_id:"dghg453r3q",level:10,username:"asaf"}],options:{}}];

const findTeam = playerId => arr.flatMap(({ teamA, teamB }) => [teamA, teamB])
                                .find(team => team.some(player => player._id === playerId));

console.log(findTeam('13rfedsc32'));

说明:

arr.flatMap(({ teamA, teamB }) => [teamA, teamB]) 将返回一个包含所有比赛中所有队伍的数组,无论它们是 A 还是 B。然后你可以轻松找到包含想要的球员的那个队伍。


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