我正在尝试通过从另一个组件传递的props数组的Index删除一个值。
[...this.props.data].splice([...this.props.data].indexOf(oldData), 1)
const {tableData, ...application} = oldData;
this.props.deleteData(application);
它删除数据,但不仅删除所选值,而且同时删除两个值。我猜问题出在splice..indexOf
oldData :is the selected row that needs to be deleted.
答案 0 :(得分:1)
您需要从0
到index - 1
以及从index + 1
到length - 1
进行合并。因此,一个简单的this.props.data.slice(0, index).concat(this.props.data.slice(index) + 1)
应该可以工作。
Imo concat
更易于阅读和推理,因为它不会使您的数组发生变异。
过滤器也可以为您服务:
const filterIndex = target => (_, i) => i !== target;
newData = data.filter(filterIndex(index));
使用过滤器版本非常容易,有两种方法,具体取决于用例。
1)删除特定索引而不在数组中留空
const target = this.props.data.indexOf(oldData);
const newData = this.props.data.filter((_, index) => index !== target);
2)从数组中删除特定值(所有出现的值),而不在数组中留空
const newData = this.props.data.filter((data) => data !== oldData);
这两个略有不同,因为第一个只会删除第一次出现的oldData
,而第二个则全部删除
发生。