Javascript 为什么筛选器返回相同的数组?

Javascript 为什么筛选器返回相同的数组?,javascript,arrays,Javascript,Arrays,我需要使用筛选器删除一个项,但它返回相同的数组。。。 我是新来的。。因此,请记住这些答案:) *方法* removeItemHandler = (id) => { if (this.state.selectedProducts.length <= 0){ return } let carsSelected = this.state.selectedProducts.filter(item => { return item

我需要使用筛选器删除一个项,但它返回相同的数组。。。 我是新来的。。因此,请记住这些答案:)

*方法*

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);}
removitemHandler=(id)=>{
如果(this.state.selectedProducts.length{
返回项目!==id})
调试器;
console.log(`item removed`,carsSelected);}
调试器(单击3项)

removitemHandler=(id)=>{***id={id:2,名称:“布加迪”,价格:3200000,描述:“极快”,总计:0,…}
***
if(this.state.selectedProducts.length***{carsSelected=(3)[{…},{…},{…}]***
退货商品!==id})***id={id:2,名称:“布加迪”,价格:3200000,说明:“极快”,总计:0,…}***
调试器;

console.log返回相同的数组

您应该按
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
即使两个对象具有相同的属性和相同的值,它们也不是相同的对象

您可以比较其唯一标识符,而不是比较整个对象


进一步阅读:

您应该按
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
即使两个对象具有相同的属性和相同的值,它们也不是相同的对象

您可以比较其唯一标识符,而不是比较整个对象


进一步阅读:

您需要将项目的id与传递给筛选出的id进行比较

let carsSelected = this.state.selectedProducts.filter(item => { return item.id !== id.id});

您需要将项目的id与传递给筛选出的id进行比较

let carsSelected = this.state.selectedProducts.filter(item => { return item.id !== id.id});

提供
selectedProducts
json。提供
selectedProducts
json。请注意,参数
id
不是标识符,它是一个对象。因此
item.id!==id
始终返回
true
。哦,是的,我没有注意到。不能使用相等运算符比较两个对象的值。在他的案例中,如果两个对象的引用不同,那么两个对象将始终为true!==请注意,参数
id
不是标识符,而是一个对象。因此
item.id!==id
始终返回
true
。哦,是的,我没有注意到。您不能使用相等运算符比较两个对象的值。In在这种情况下,如果两个对象的引用不同,则这两个对象将始终为true!==乐意帮助:)乐意帮助:)