reactJS从数组中删除项目

时间:2017-09-11 05:21:43

标签: javascript arrays reactjs

我从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岁的那个

enter image description here

问题:我应该这样做吗?当一个人被发现并重新开始时,Breac就会出现这个问题?可能是错误的索引?

2 个答案:

答案 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)),
    });
  }
});