javascript - 如何从状态数组中删除一个项目?

标签 javascript arrays reactjs

故事是,我应该能够将 Bob、Sally 和 Jack 放入一个盒子中。我也可以从盒子里取出任何一个。移除后,不会留下任何插槽。

people = ["Bob", "Sally", "Jack"]

我现在需要删除“Bob”。新数组将是:

["Sally", "Jack"]

这是我的 react 组件:

...

getInitialState: function() {
  return{
    people: [],
  }
},

selectPeople(e){
  this.setState({people: this.state.people.concat([e.target.value])})
},

removePeople(e){
  var array = this.state.people;
  var index = array.indexOf(e.target.value); // Let's say it's Bob.
  delete array[index];
},

...

在这里,我向您展示了一个最小的代码,因为它还有更多的代码(onClick 等)。关键部分是从数组中删除、移除、销毁“Bob”,但调用时 removePeople() 不起作用。有任何想法吗?我是looking at this但我可能做错了什么,因为我使用的是 React。

最佳答案

当使用 React 时,你不应该直接改变状态。如果一个对象(或 Array,它也是一个对象)发生变化,您应该创建一个新副本。

其他人建议使用 Array.prototype.splice(),但该方法会改变数组,因此最好不要将 splice() 与 React 一起使用。

使用 Array.prototype.filter() 创建新数组最简单:

removePeople(e) {
    this.setState({people: this.state.people.filter(function(person) { 
        return person !== e.target.value 
    })});
}

关于javascript - 如何从状态数组中删除一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326612/

相关文章:

javascript - 使用jquery第n个子选择器进行选择

javascript - For Loop on array from dynamic API in JSON format within template literals

javascript - 如何将字符串渲染为自定义 React 组件?

javascript - VS Code 中的红色波浪线

javascript - 未捕获的类型错误 : Cannot read property 'data' of undefined with Gatsby and graphQl

javascript - 仅当表格超过 2 行时才返回最接近 <tr> 的选择器

javascript - 您可以单步执行在 chrome 开发工具(控制台)中创建的函数吗?

javascript - window.open 返回上一页

php - 数组循环问题

javascript - 如何在 JS 查找函数中使用条件