繁体   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