[英]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.