簡體   English   中英

如何檢查變體組合是否已存在於 Javascript 中?

[英]How to check if the variation combination already exists in Javascript?

在注冊產品變體 (myVariations) 之前,我需要檢查變體是否已經存在。

:我想注冊變體 2 和 6。我需要在allVariations數組中查找包含相同product_detail_id 的變體

:2 和 6 將返回 true,因為它們都屬於同一個 product_detail_id (3)

2 和 4 將返回 false,因為:

2 屬於 product_detail_id 1

4 屬於 product_detail_id 2

如果可能,我希望它返回 true 或 false

在下面的示例中,我在 myVariations 變量中有 2 和 6,但它可能有兩個以上的變體。

  console.log(allVariations)
  console.log(myVariations)

/* CONSOLE */
[ RowDataPacket { product_detail_id: 1, variation_id: 2 },
  RowDataPacket { product_detail_id: 1, variation_id: 5 },
  RowDataPacket { product_detail_id: 2, variation_id: 4 },
  RowDataPacket { product_detail_id: 2, variation_id: 6 },
  RowDataPacket { product_detail_id: 3, variation_id: 2 },
  RowDataPacket { product_detail_id: 3, variation_id: 6 } ] // allVariations

[ { variation_id: 2 }, { variation_id: 6 } ] // myVariations

我花了一段時間,可能有更好的方法,但這可以正常工作:

也適用於 2 個以上的元素

 const allVariations = [ { product_detail_id: 1, variation_id: 2 }, { product_detail_id: 1, variation_id: 5 }, { product_detail_id: 2, variation_id: 4 }, { product_detail_id: 2, variation_id: 6 }, { product_detail_id: 3, variation_id: 2 }, { product_detail_id: 3, variation_id: 6 }, { product_detail_id: 4, variation_id: 1 }, { product_detail_id: 4, variation_id: 2 }, { product_detail_id: 4, variation_id: 3 }, ]; const isContain = variation => !!variation.reduce((acc, my) => [...acc, allVariations.filter(all => my.variation_id === all.variation_id)], []) .reduce((acc, cur) => cur.find(e1 => acc && [acc].flat().some(e2 => e1.product_detail_id === e2.product_detail_id))); console.log(isContain([{ variation_id: 2 }, { variation_id: 6 }])); // true console.log(isContain([{ variation_id: 2 }, { variation_id: 4 }])); // false console.log(isContain([{ variation_id: 1 }, { variation_id: 2 }, { variation_id: 3 }])); // true

我會使用 2 個forEach循環:

 var all = [{ product_detail_id: 1, variation_id: 2 }, { product_detail_id: 1, variation_id: 5 }, { product_detail_id: 2, variation_id: 4 }, { product_detail_id: 2, variation_id: 6 }, { product_detail_id: 3, variation_id: 2 }, { product_detail_id: 3, variation_id: 6 }]; var myFalse = [{ variation_id: 2 }, { variation_id: 6 }, { variation_id: 7 }]; function hasAllVariations(allVariations, myVariations){ var r = [], l = myVariations.length, a = []; myVariations.forEach(function(o){ allVariations.forEach(function(q){ if(o.variation_id === q.variation_id)r.push(q); }); }); if(r.length < l){ return false; } r.forEach(function(o, k){ r.forEach(function(q, i){ if(k !== i && o.product_detail_id === q.product_detail_id && a.indexOf(k) === -1)a.push(k); }); }); return a.length >= l; } console.log(hasAllVariations(all, myFalse)); var myTrue = [{ variation_id: 2 }, { variation_id: 6 }]; console.log(hasAllVariations(all, myTrue)); console.log(hasAllVariations(all, [{ variation_id: 2 }, { variation_id: 4 }]));

暫無
暫無

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

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