当前位置: 首页 > news >正文

商品 SKU 计算,库存不足不能选择

电商项目sku规格计算

假如一件商品的规格如下

在这里插入图片描述

// 可以很轻松的知道当前商品一共有 6 种情况
// 部分商品inventory库存是 0,不能选择
// 不能选择的组合一共有 2 种,可以选择的组合有 4 种// 所有规格
const all = [{ id: 1, inventory: 60, specName: '红色-小' },{ id: 2, inventory: 0, specName: '红色-中' },{ id: 3, inventory: 51, specName: '黄色-小' },{ id: 4, inventory: 95, specName: '黄色-中' },{ id: 5, inventory: 0, specName: '蓝色-小' },{ id: 6, inventory: 29, specName: '蓝色-中' }
]
// 可以选择的规格
const canSelect = [['红色', '小'], ['黄色', '小'], ['黄色', '中'], ['蓝色', '中']],// 不能选择的规格
const notSelect = [['红色', '中'], ['蓝色', '小']]
const convertTo2DArray = (arr) => {const n = arr.length;const result = [];for (let i = 0; i < n; i++) {const temp = [...arr.slice(0, i), ...arr.slice(i + 1)];result.push(temp);}return result;
};/** 判断数组2是否包含在数组1中 */
const isArrayContained = (arr1, arr2) => {return arr2.every((x) => arr1.includes(x));
};/** 求两个数组差集 */
const arrayDifference = (arr1, arr2) => {const set1 = new Set(arr1);const set2 = new Set(arr2);return Array.from(new Set([...set1].filter((x) => !set2.has(x))));
};// 假设目前选中了第一款
const select = ['红色', '小'],// 期望结果返回一个数组,包含了所有不能选择的规格,只用把结果返回的项禁用即可
['中', '蓝色']// 计算步骤
const arr = convertTo2DArray(select);
const arr2 = [];
notSelect.forEach((item) => {arr.forEach((item2) => {if (isArrayContained(item, item2)) {arr2.push(...arrayDifference(item, item2));}});
});
console.log(arr2);// 优化版本
function getConflictingSpecs(selected, notSelect) {const conflicts = new Set();notSelect.forEach((forbidden) => {// 检查是否有交集const intersection = selected.filter((spec) => forbidden.includes(spec));if (intersection.length > 0) {// 将冲突的规格加入结果forbidden.forEach((spec) => {if (!selected.includes(spec)) {conflicts.add(spec);}});}});return Array.from(conflicts);
}
http://www.lryc.cn/news/614731.html

相关文章:

  • SpringBoot的profile加载
  • C++ 模拟实现 map 和 set:掌握核心数据结构
  • 恒科持续低迷:新能源汽车股下跌成拖累,销量担忧加剧
  • Mac下安装Conda虚拟环境管理器
  • AI开发平台行业全景分析与战略方向建议
  • WPF 动画卡顿
  • Seaborn 数据可视化库:入门与进阶指南
  • 解决多线程安全性问题的方法
  • 无人设备遥控器之信号编码技术篇
  • 深入理解OpenGL Shader与GLSL:基础知识与优势分析
  • 【深度学习】动手深度学习PyTorch版——安装书本附带的环境和代码(Windows11)
  • list的简单介绍
  • 大厂求职 | 唯品会2026校园招聘正式启动!
  • “鱼书”深度学习进阶笔记(1)第二章
  • 微信小程序功能 表单密码强度验证
  • NOIP 2024 游记
  • [激光原理与应用-185]:光学器件 - BBO、LBO、CLBO晶体的全面比较
  • LoRA微调的代码细节
  • 2025年渗透测试面试题总结-07(题目+回答)
  • 【设计模式】访问者模式模式
  • Chrome DevTools Protocol 开启协议监视器
  • flutter开发(一)flutter命令行工具
  • SVM实战:从线性可分到高维映射再到实战演练
  • 【同余最短路】P2371 [国家集训队] 墨墨的等式|省选-
  • 在 Git 中,将本地分支的修改提交到主分支
  • 广东省省考备考(第七十天8.8)——言语、判断推理(强化训练)
  • ubuntu 22.04 使用yaml文件 修改静态ip
  • 开发板RK3568和stm32的异同:
  • Redis对象编码
  • 【Bellman-Ford】High Score