为什么filter返回相同的数组?

时间:2019-09-02 11:46:15

标签: javascript arrays

我需要使用过滤器删除一个项目,但是它返回相同的数组... 我是新来的人..所以请记住这些答案:)

*方法*

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返回相同的数组

2 个答案:

答案 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

即使两个对象具有相同的属性且具有相同的值,但它们也不是相同的对象。

您可以比较其唯一标识符

,而不是比较整个对象

进一步阅读:Object comparison in JavaScript

答案 1 :(得分:0)

您需要将商品的ID与传递给您的ID进行比较以过滤掉。

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