从props数组中按索引值删除

时间:2019-07-17 14:41:17

标签: javascript reactjs

我正在尝试通过从另一个组件传递的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.

1 个答案:

答案 0 :(得分:1)

您需要从0index - 1以及从index + 1length - 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,而第二个则全部删除 发生。