2017-01-06 5 views
0

Ich habe derzeit eine map eines Arrays von Benutzern, die alle einen eindeutigen _id Schlüssel/Wert haben.JavaScript Array Vergleich Funktion

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

Ich habe auch zwei andere Arrays, eines mit dem Namen teams und einem anderen Namen accounts.

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

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

versuchen, zwei Vergleichsfunktionen zu schaffen, die das Argument der user und Ausgänge numberOfTeamsnumberOfAccounts und für den entsprechenden user nimmt.

Ich habe versucht, die numberOfTeams unten, aber ich bin mir nicht sicher, ob es die optimale ist.

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

Mit dem numberOfAccounts, bin ich fest, wie man vergleichen authorizedUsers === user._idORownerTeamId === team._id wo auch members.userId === user.id und dann count++.

+0

'numberOfAccounts' Eigenschaft erscheint nicht bei' Javascript' Objekte bei Frage? Was ist 'numberOfAccounts' Referenzierung,' Mitglieder' Array? – guest271314

Antwort

3

Es ist wahrscheinlich ein guter Anfang, eine Funktion zu schreiben, um die Teams zu erhalten ein Benutzer gehört:

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

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

denn dann können Sie numberOfTeams es mit schreiben:

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

dann einer ähnlichen Funktion erhalten Konten:

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

dann numberOfAccounts es mit:

Im Wesentlichen: verwenden Sie mehr Funktionen, damit Sie die Schritte verstehen, die Sie unternehmen, um Ihr eigenes Problem zu lösen, und diese Schritte damit effektiver zu verwenden.