javascript - 如何在 React 中删除对象数组中的多个项目?
问题描述
我有一个带有对象数组的 React 应用程序。我使用一种方法首先获取对象 id 列表,然后通过将它们与 id 列表进行比较来删除数组中的元素。问题是,该函数产生了错误的输出。
这是功能
var questionsToRemove = [3,5,6,7];
state.questionsData = [
{ order: 1, question: "q1" },
{ order: 2, question: "q2" },
{ order: 3, question: "q3" },
{ order: 4, question: "q4" },
{ order: 5, question: "q5" },
{ order: 6, question: "q6" },
{ order: 7, question: "q7" },
];
removeQuestion = () => {
var questionssData = this.state.questionsData
questionssData.forEach(each => {
if (questionsToRemove.includes(each.order)) {
questionssData.splice(questionssData.indexOf(each))
}
});
this.setState({ questionsData: questionssData })
}
上述方法产生错误的输出为
{ order: 1, question: "q1" },
{ order: 2, question: "q2" },
{ order: 4, question: "q4" },
{ order: 6, question: "q6" },
我尝试了ES6过滤方法如下
removeQuestion = () => {
var questionssData = this.state.questionsData
questionssData.filter(each => {
return questionsToRemove.includes(each.order)
});
this.setState({ questionsData: questionssData })
}
但这会产生相同的原始数组而不过滤任何内容。如何从数组中删除选定的对象?
解决方案
您必须将过滤器结果数组分配给您的变量。此外,为了过滤(删除),您必须从您的方法中返回 false :
removeQuestion = () => {
var questionssData = this.state.questionsData
questionssData = questionssData.filter(each => {
return !questionsToRemove.includes(each.order)
});
this.setState({ questionsData: questionssData })
}
推荐阅读
- angular - 我想安装 angular-cli 时遇到问题
- apache-kafka - Kafka:高可用性所需的最少代理数量是多少?
- reactjs - Reactjs 访问另一个组件的状态
- mongodb - MongoDB。选择其他网络中存在的字段
- php - 选择计数字符串,然后将它们分组到饼图
- android - Google Play 服务错误任务“:transformClassesWithJarMergingForRelease”执行失败
- javascript - 更改 axios 请求网络名称
- typescript - 在 Typescript 中获取和设置?
- python - Flask SQLAlchemy 查询 beetwen 2 个表
- c# - 根据选择的不同 ComboBoxItem 值自动选择 ComboBoxItem