2017-06-02 4 views
0

Also habe ich ein Array von Benutzern, die an bestimmte Teams gebunden sind, jeder Benutzer mit bestimmten Berechtigungen. Wenn der Benutzer auf mehrere Teams gebunden ist, werden alle diese Teams sind auch vorhanden im Array:ReactJS Wie man ein Array durchläuft und ein spezifisches Objektattribut in einem anderen Array abruft

[ 
{ 
    "name" : "user1", 
    "teams": [ 
     {"id": "123", "name": "team-1", "permissions" : 1} 
    ] 
}, 
{ 
    "name" : "user2", 
    "teams": [ 
     {"id": "123", "name": "team-1", "permissions" : 3} 
    ] 
}, 
{ 
    "name" : "user3", 
    "teams": [ 
     {"id": "456", "name": "team-2", "permissions" : 3}, 
     {"id": "789", "name": "team-3", "permissions" : 3}, 
     {"id": "123", "name": "team-1", "permissions" : 3}, 
     {"id": "233", "name": "team-4", "permissions" : 3} 

    ] 
} 

] 

so jetzt will ich dies:

ich die ID des Team bekam bei Ich suche (ID: 123), wie kann ich das Array zuordnen, so dass ich nur die Berechtigungen für das Team mit der ID: 123 anzeigen kann?

Ich habe Folgendes getan, aber das funktioniert nicht, da das erste Element von User3 das falsche Team ist.

const MembersTable = observer(({ state }) => (
    <div> 
    <table className="table table-hover table-responsive"> 
     <thead> 
     <tr> 
     <th>Name</th> 
     <th>Email</th> 
     <th>Permissions</th> 
     </tr> 
    </thead> 
    <tbody> 
     {state.accounts.map((account, i) => <MembersTableData state={state} account={account} team={account.teams} key={i}/>)} 
    </tbody> 
    </table> 
</div> 
)) 

const MembersTableData = observer(({ state, account, organization }) => (
    <tr> 
    <td> 
     <span>{account.fullName}</span> 
    </td> 
    <td>{account.email}</td> 
    <td> 
    {team[0].permissions == 1 && <span>member</span>} 
    {team[0].permissions == 2 && <span>administrator</span>} 
    {team[0].permissions == 3 && <span>super admin</span>} 
    </td> 
    </tr> 
)) 

this.state.team ist in diesem Fall "123".

Wie kann ich das lösen?

Antwort

1

team[0] wird immer das erste Team haben, zu dem der Benutzer gehört. Was Sie wollen, ist das Team, das eine id Eigenschaft hat, die this.state.team entspricht. So versuchen statt team[0] tun:

{team.find(t => t.id == this.state.team).permissions == 3 && <span>super admin</span>}

Natürlich ist dies für „Mitglied“ geht und „admin“ als auch.

+0

Dank versuchen sollte, das funktioniert für mich! :-) – Steve

0

Sie diesen

const getTeamData = (data, teamId) => data.map(users => users.teams.filter(team => team.id === teamId)).reduce((acc, current) => acc.concat(current)); 

/** 

[ { 
    id: "123", 
    name: "team-1", 
    permissions: 1 
}, { 
    id: "123", 
    name: "team-1", 
    permissions: 3 
}, { 
    id: "123", 
    name: "team-1", 
    permissions: 3 
}] 
*/ 
Verwandte Themen