筛选具有多个条件的数组

Sgt*_*nut 0 javascript arrays

数组看起来像

products = [
    {
      "id": "5c94aa7b7a37631ce2a97a72",
      "material": "5c9485d37804946bc487ce59",
    },
    {
      "id": "5c94aa7b7a37631ce2a97a72",
      "material": "5c94862a7804946bc487ce5e",
    },
    {
      "id": "5c94aa7b7a37631ce2a97a72",
      "material": "5c9486397804946bc487ce61",
    },
    {
      "id": "5c94a0a87a37631ce2a979de",
      "material": "5c9485d37804946bc487ce59",
    },
    {
      "id": "5c94a0a87a37631ce2a979de",
      "material": "5c94862a7804946bc487ce5e",
    },
    {
      "id": "5c94a0a87a37631ce2a979de",
      "material": "5c9486397804946bc487ce61",
    }
  ]
Run Code Online (Sandbox Code Playgroud)

当我尝试使用id="5c94aa7b7a37631ce2a97a72"和仅删除一项material="5c9485d37804946bc487ce59"

我使用过滤功能

filtered = products.filter(x => x.id !== id && x.material !== material);
Run Code Online (Sandbox Code Playgroud)

它将删除所有具有这些ID和材料的产品。在此功能中设置条件的正确方法是什么?

Cer*_*nce 5

只需使用||代替&&,这样两个条件都必须为false才能使filter回调返回false

const products = [{
    "id": "5c94aa7b7a37631ce2a97a72",
    "material": "5c9485d37804946bc487ce59",
  },
  {
    "id": "5c94aa7b7a37631ce2a97a72",
    "material": "5c94862a7804946bc487ce5e",
  },
  {
    "id": "5c94aa7b7a37631ce2a97a72",
    "material": "5c9486397804946bc487ce61",
  },
  {
    "id": "5c94a0a87a37631ce2a979de",
    "material": "5c9485d37804946bc487ce59",
  },
  {
    "id": "5c94a0a87a37631ce2a979de",
    "material": "5c94862a7804946bc487ce5e",
  },
  {
    "id": "5c94a0a87a37631ce2a979de",
    "material": "5c9486397804946bc487ce61",
  }
];
console.log(products.length);
const id = "5c94aa7b7a37631ce2a97a72";
const material = "5c9485d37804946bc487ce59";
const filtered = products.filter(x => x.id !== id || x.material !== material);
console.log(filtered.length);
console.log(filtered);
Run Code Online (Sandbox Code Playgroud)