Мое предложение будет использовать сокращение в вашей функции, также, если вы напишите это хорошо, вы можете помешать себе вернуться к этому indentation hell
.
Предположим, guns
это массив:
guns = [{id: 1, name: 'hello'}, {id: 2, name: 'world'}];
и ваш arr
:
arr = ['hello', 'ajay']
Затем вы можете использовать уменьшить, чтобы получить предметы, которые обычно встречаются в guns
и arr
.
guns.reduce(function(brr, gun){
arr.forEach(function(item){
if(item === gun.name){
brr.push(item);
}
})
return brr;
}, [])
Итак, что вы должны сделать, это (может создать некоторую проблему скобок / отступов и т. Д., Так что просто дать вам идею):
{this.state.items.map((item, index) => {
return (
<div key={index}>
<List>
{this.state.items[index].squadMembers.map((squadMember, index) => {
var arr = squadMember.equipment.split(',');
const itemsToRender = guns.reduce(function(brr, gun){
arr.forEach(function(item){
if(item === gun.name){
brr.push(gun);
}
})
return brr;
}, []);
return (
<div key={index}>
<table>
<tbody>
{itemsToRender
.map((gun, index) => {
return (
<tr key={index}>
<td>{gun.weapon}</td>
<td>"..."</td>
<td>"..."</td>
</tr>
)
}
</tbody>
</table>
</div>
)})}
</List>
</div>
)
})}