2017-01-06 6 views
0

В настоящее время у меня есть map из массива пользователей, у которых все имеют уникальный ключ/значение _id.Функция сравнения массивов JavaScript

user = [{_id: "1", ... }, {_id: "2", ... }, ... ]

У меня также есть два других массива, один с именем teams и другого имени accounts.

teams = [{ _id: "1", members: [{ userId: "2" }, { userId: "4" }, ... ], ... }]

accounts = [{ _id: "1", authorizedUsers: [{ userId: "3"}, ... ], ownerTeamId: "2" }, ... ]

Попытка создать два сравнения функции, которая принимает аргумент user и выходов numberOfTeams и numberOfAccounts для соответствующего user.

Я попытался установить numberOfTeams ниже, но я не уверен, что это самый оптимальный вариант.

numberOfTeams(user) { 
    let count = 0; 
    teams.forEach(team => { 
    team.members.forEach(member => { 
     if (member.userId === user._id) { 
     count++ 
     } 
    }) 
    }); 
    return count; 
} 

С numberOfAccounts, я застрял на том, как сравнить authorizedUsers === user._idИЛИownerTeamId === team._id, где также members.userId === user.id, а затем count++.

+0

Свойство 'numberOfAccounts' не отображается в' javascript' объектах в вопросе? Что такое «numberOfAccounts», массив 'members'? – guest271314

ответ

3

Это, вероятно, хорошее начало, чтобы написать функцию, чтобы получить команду принадлежит пользователю:

function containsUserId(users, id) { 
    return users.some(user => user.userId === id); 
} 

function getUserTeams(user, teams) { 
    return teams.filter(team => 
     containsUserId(team.members, user._id)); 
} 

, потому что тогда вы можете написать numberOfTeams использовать его:

numberOfTeams(user) { 
    return getUserTeams(user, teams).length; 
} 

затем аналогичная функция получить счета:

function getUserAccounts(user, accounts) { 
    const userTeamIds = new Set(
     getUserTeams(user).map(team => team._id) 
    ); 

    return accounts.filter(account => 
     containsUserId(account.authorizedUsers, user._id) || 
     userTeamIds.has(accounts.ownerTeamId)); 
} 

затем numberOfAccounts использовать его:

По существу: используйте больше функций, чтобы вы могли понять шаги, которые вы предпринимаете для решения своей проблемы, и при этом более эффективно использовать эти шаги.