我需要使用过滤器删除一个项目,但是它返回相同的数组... 我是新来的人..所以请记住这些答案:)
*方法*
removeItemHandler = (id) => {
if (this.state.selectedProducts.length <= 0){
return
}
let carsSelected = this.state.selectedProducts.filter(item => {
return item !== id})
debugger;
console.log(`item removed`, carsSelected);}
调试器(点击了3个项目)
removeItemHandler = (id) => { ***id = {id: 2, name: "Bugatti", price: 3200000, description: "Extremely Fast", total: 0, …}
***
if (this.state.selectedProducts.length <= 0){
return
}
let carsSelected = this.state.selectedProducts.filter(item => ***{ carsSelected = (3) [{…}, {…}, {…}]***
return item !== id}) ***id = {id: 2, name: "Bugatti", price: 3200000, description: "Extremely Fast", total: 0, …}***
debugger;
console.log返回相同的数组
答案 0 :(得分:2)
您应按item.id
而不是item
过滤
let carsSelected = this.state.selectedProducts.filter(item => item.id !== id.id)
// ^^
请注意,您正在将对象作为id
参数传递。您正在比较两个对象。用JavaScript不容易做到这一点。对象平等不是看起来。例如:
var firstObject = {
id: 1,
foo: "foo",
bar: "bar"
};
var secondObject = {
id: 1,
foo: "foo",
bar: "bar"
};
console.log(firstObject === secondObject); // with triple "="
// Output: false
console.log(firstObject == secondObject); // with double "="
// Output: false
即使两个对象具有相同的属性且具有相同的值,但它们也不是相同的对象。
您可以比较其唯一标识符
,而不是比较整个对象答案 1 :(得分:0)
您需要将商品的ID与传递给您的ID进行比较以过滤掉。
let carsSelected = this.state.selectedProducts.filter(item => { return item.id !== id.id});