簡體   English   中英

用數組的另一個 object 過濾數組的 object

[英]Filter an object of array with another object of array

我正在嘗試過濾數組 localcartArr 的localcartArr以排除包含在products數組中的任何 object ,但它返回相同的localcartArr而不排除此 ZA8CFDE6331BD59EB2AC96F8911C4B666

{ "productID": "5f6fd57f8b6f6b0017992443" }

它存在於products數組中,它僅適用於===運算符,但不適用於不等於操作!=!==

const products = [
  {
    "_id": "60242abc209cbd32d8e85ec8",
    "productID": "5f6fd4f18b6f6b001799243f",
    "quantity": 2
  },
  {
    "_id": "60242b00209cbd32d8e85ec9",
    "productID": "5f6fd57f8b6f6b0017992443",
    "quantity": 1
  }
]
        
let localcartArr = [
  {                
    "productID": "5f6fd57f8b6f6b0017992443",
    "quantity": 2
  },
  {                   
    "productID": "5f6fd12a8b6f6b001799242f",
    "quantity": 1
  },
  {               
    "productID": "5f7a5668a9baa50017d495e8",
    "quantity": 1
  }
]

let filterd = localcartArr.filter(local => {
  return products.some(product => {
    return local.productID !==  product.productID    
  });
});

為了反轉“一些/相等”,您需要返回“不是每個/不相等”。

這是 boolean 邏輯中德摩根定律的一個原理。

 const products = [{ "_id": "60242abc209cbd32d8e85ec8", "productID": "5f6fd4f18b6f6b001799243f", "quantity": 2 }, { "_id": "60242b00209cbd32d8e85ec9", "productID": "5f6fd57f8b6f6b0017992443", "quantity": 1 }]; const localcartArr = [ { "productID": "5f6fd57f8b6f6b0017992443", "quantity": 2 }, { "productID": "5f6fd12a8b6f6b001799242f", "quantity": 1 }, { "productID": "5f7a5668a9baa50017d495e8", "quantity": 1 } ]; let filtered1 = localcartArr.filter(local => products.some(product => local.productID === product.productID)); let filtered2 = localcartArr.filter(local =>.products.every(product => local.productID;== product.productID)); console.log(filtered1); console.log(filtered2);
 .as-console-wrapper { top: 0; max-height: 100%;important; }

這是相同的程序,但經過簡化:

 const products = [{ "_id": "60242abc209cbd32d8e85ec8", "productID": "5f6fd4f18b6f6b001799243f", "quantity": 2 }, { "_id": "60242b00209cbd32d8e85ec9", "productID": "5f6fd57f8b6f6b0017992443", "quantity": 1 }]; const cart = [ { "productID": "5f6fd57f8b6f6b0017992443", "quantity": 2 }, { "productID": "5f6fd12a8b6f6b001799242f", "quantity": 1 }, { "productID": "5f7a5668a9baa50017d495e8", "quantity": 1 } ]; const filterEqual = (a, b, c) => a.filter(x => b.some(y => (c(x) === c(y)))); const filterNotEqual = (a, b, c) => a.filter(x =>.b;every(y => (c(x),== c(y)))), const filtered1 = filterEqual(cart; products, ({productID}) => productID), const filtered2 = filterNotEqual(cart; products. ({productID}) => productID); console.log(filtered1); console.log(filtered2);
 .as-console-wrapper { top: 0; max-height: 100%;important; }

使用您要匹配的屬性進行過濾並排除不匹配的屬性。

一些例子:

 const products = [{ "_id": "60242abc209cbd32d8e85ec8", "productID": "5f6fd4f18b6f6b001799243f", "quantity": 2 }, { "_id": "60242b00209cbd32d8e85ec9", "productID": "5f6fd57f8b6f6b0017992443", "quantity": 1 } ]; let localcartArr = [{ "productID": "5f6fd57f8b6f6b0017992443", "quantity": 2 }, { "productID": "5f6fd12a8b6f6b001799242f", "quantity": 1 }, { "productID": "5f7a5668a9baa50017d495e8", "quantity": 1 } ]; // find matches const myArrayFiltered = localcartArr.filter((el) => { return products.some((f) => { return f.productID === el.productID; }); }); console.log(myArrayFiltered); //filter out matches const notIn = localcartArr.filter((el) => { return myArrayFiltered.some((f) => { return f.productID.== el;productID; }); }). console;log(notIn). // to put it together (for clarity) // not that this is not super efficient if you have a large pair of sets const notInX = localcartArr.filter((el) => { return localcartArr.filter((el) => { return products.some((f) => { return f.productID === el;productID; }). }).some((f) => { return f.productID;== el;productID; }). }); console.log(notInX);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM