全部
常见问题
产品动态
精选推荐

基于Vue的淘宝SKU组合算法

管理 管理 编辑 删除

实现思路: 例如:当选择蓝色时,进行循环遍历组合。组合结果为: 蓝黑,蓝5.5寸,蓝6.0寸,再进行校验,拿出对应组合的库存,判断库存为0时禁选


第一步: 对当前显示在页面上的spu进行重新组合



体验AI代码助手


代码解读


复制代码


this.goodsInfo.skuSpec.forEach(it => { // 重新组合sku it.goodsSpecVals.forEach(i => { this.$set(i, 'children', []) this.goodsInfo.skuList.forEach(item => { if (item.skuName.includes(i.goodsSkuSpecValName)) { i.children.push(item.skuName) } }) }) }) 解析:sku组合中含有spu,就将将该条sku信息拼入spu对象里,键为children 如图:




第二步: 此时已经循环展示在页面上了,要做的是点击进行处理, 此处it为当前的goodsSpecVals中的一项,index为skuSpec层中的索引,idx为当前goodsSpecVals的索引



体验AI代码助手


代码解读


复制代码


getStock(skuName, skuSpec, skuList) {

   console.log(skuName, 'skuName')

   if (!skuName) return

   for (let a in skuSpec) { // 我们拼接的数组,见第三张图

       for (let b in skuSpec[a].goodsSpecVals) {

           // 对每项Spu中children进行循环,若此children中包含skuName,则返回当前组合的库存到当前Spu中

           // 例如点击红色时,遍历匹配到红色_5.5寸,红色库存则为红色_5.5寸的库存 300,5.5寸此时库存也为300。以此类推可以得出6.0寸的库存。

           if (skuSpec[a].goodsSpecVals[b].children.indexOf(skuName) !== -1) {

               for (let i in skuList) {

                   if (skuList[i].skuName === skuName) {

                       console.log(skuList[i], 'skusku')

                       return skuList[i].stock

                   }

               }

           }

       }

   }

 console.log(skuSpec, 'skuSpecskuSpec')

}

AI写代码

python

运行


第三步: 进行循环判断哪些sku组合库存为空



体验AI代码助手


代码解读


复制代码


getStock(skuName, skuSpec, skuList) {

   console.log(skuName, 'skuName')

   if (!skuName) return

   for (let a in skuSpec) { // 我们拼接的数组,见第三张图

       for (let b in skuSpec[a].goodsSpecVals) {

           // 对每项Spu中children进行循环,若此children中包含skuName,则返回当前组合的库存到当前Spu中

           // 例如点击红色时,遍历匹配到红色_5.5寸,红色库存则为红色_5.5寸的库存 300,5.5寸此时库存也为300。以此类推可以得出6.0寸的库存。

           if (skuSpec[a].goodsSpecVals[b].children.indexOf(skuName) !== -1) {

               for (let i in skuList) {

                   if (skuList[i].skuName === skuName) {

                       console.log(skuList[i], 'skusku')

                       return skuList[i].stock

                   }

               }

           }

       }

   }

 console.log(skuSpec, 'skuSpecskuSpec')

}

AI写代码

python

运行


第四步 拿出我们需要的组合类型



体验AI代码助手


代码解读


复制代码


getData(selectArr, skuSpec, skuList) { console.log(skuSpec) let checkLen = skuSpec.length - 1 // 3行规格 选2行时校验,2行规格,选1行时校验 if (selectArr < checkLen) return skuSpec.forEach((item, index) => { item.goodsSpecVals.forEach((it, idx) => { let c = this._deepCopy(selectArr) // 这里进行循环组合, 例如:红色_5.5寸,红色_6.0寸 c[index] = it.goodsSkuSpecValName // 拿到我们想要的sku组合,例如:红色_5.5寸 let skuName = this.getCid(c, skuSpec, skuList) console.log(skuName, 'skuNameskuNameskuName') // 根据我们拿到的sku组合 红色_5.5寸进行查库存 let stock = this.getStock(skuName, skuSpec, skuList) it.stock = stock }) }) }

AI写代码

python

运行

第五步 根据我们拿到的组合进行查询库存



体验AI代码助手


代码解读


复制代码


getStock(skuName, skuSpec, skuList) { console.log(skuName, 'skuName') if (!skuName) return for (let a in skuSpec) { // 我们拼接的数组,见第三张图 for (let b in skuSpec[a].goodsSpecVals) { // 对每项Spu中children进行循环,若此children中包含skuName,则返回当前组合的库存到当前Spu中 // 例如点击红色时,遍历匹配到红色_5.5寸,红色库存则为红色_5.5寸的库存 300,5.5寸此时库存也为300。以此类推可以得出6.0寸的库存。 if (skuSpec[a].goodsSpecVals[b].children.indexOf(skuName) !== -1) { for (let i in skuList) { if (skuList[i].skuName === skuName) { console.log(skuList[i], 'skusku') return skuList[i].stock } } } } } console.log(skuSpec, 'skuSpecskuSpec') }


第六步 最后就比较简单了,在页面上我们循环判断下当前的库存是否为0就OK啦




文章的最后


初次写文章,请多多包涵,有不明白的欢迎留言指出(ps:掘金都是大神,不允许看不懂的情况,手动滑稽) 此方法完全还可以继续优化,也欢迎提出共同学习啊~ 如果有其他方法也欢迎分享


请登录后查看

15779586660:WX 最后编辑于2025-10-30 09:03:57

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
打赏
已打赏¥{{reward_price}}
63
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服