我从aws cognitio中获取用户列表,这非常有效。
现在我想迭代这个数组并删除那些与客户机ID不匹配的数据,这些数据无效。
在这种情况下我的失败是什么?
我的代码如下所示:
this.awsSDKAuth().listUsers(params, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else {
let userArray = data.Users.slice(0);
console.log(userArray);
userArray.forEach((user,index) => {
user.Attributes.forEach(attr => {
if(attr.Name === "custom:client" && attr.Value !== clientId){
userArray.splice(index,1);
console.log(userArray);
}
}
)});
console.log(userArray);
this.setState({
users: userArray
})
}
});
由于
在这种情况下,我有两个用户,其中clientID = 36 和clientID = 35的一个。
只显示36岁的那个
问题:我应该这样做吗?当一个人被发现并重新开始时,Breac就会出现这个问题?可能是错误的索引?
答案 0 :(得分:3)
在这种情况下我的失败是什么?
你在迭代它时改变数组。请改用filter
。
this.awsSDKAuth().listUsers(params, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else {
let userArray = data.Users.slice(0)
.filter(user => user.Attributes.some(attr => attr.Name === "custom:client" && attr.Value === clientId));
this.setState({
users: userArray
})
}
});
const userData = [{
Attributes: [{
name: 'custom:client',
value: '36'
},
{
name: 'FirstName',
value: 'Keep'
}
]
},
{
Attributes: [{
name: 'custom:client',
value: '35'
},
{
name: 'FirstName',
value: 'Omit'
}
]
},
{
Attributes: [{
name: 'custom:client',
value: '36'
},
{
name: 'FirstName',
value: 'Keep'
}
]
},
{
Attributes: [{
name: 'custom:client',
value: '37'
},
{
name: 'FirstName',
value: 'Omit'
}
]
}
]
console.log(
userData.filter(user => user.Attributes.some(attr => (attr.name === 'custom:client' && attr.value === '36')))
)
答案 1 :(得分:0)
这可能适合你。您可以根据用户返回具有正确名称和值的属性的条件来过滤用户。
this.awsSDKAuth().listUsers(params, (err, data) => {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
this.setState({
users: data.Users.filter(user => user.Attributes.some(attr => attr.Name === "custom:client" && attr.Value === clientID)),
});
}
});