我有一个带有对象数组的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 })
}
但这会产生相同的原始数组,而不过滤任何内容。如何从阵列中删除选定的对象?
.filter
Array方法不会使数组发生变异,它会创建一个具有过滤值的新数组。只需将filter的结果分配给即可questionssData
。
questionssData = questionssData.filter(each => {
return !questionsToRemove.includes(each.order)
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句