uni-app如何实现类似京东的SKU商品属性选择算法

煙雲

煙雲

2026-07-31

911人浏览

原创

sku选择必须基于已选规格组合实时过滤,不能仅凭单值查库存;每次点击需用selectedvalues生成完整key匹配skus中spec_value_ids且stock>0的项,禁用状态须动态重算、不可缓存,v-for中disabled字段须由computed返回新数组以触发视图更新。

uni-app如何实现类似京东的sku商品属性选择算法

SKU选择必须基于已选规格组合实时过滤,不是单值查库存

点完“红色”后,“XL”还能点,但提交报“无货”,说明你只判断了“XL”是否在任意 SKU 里出现过,没验证“红色+XL”这个组合是否存在且有库存。真正有效的判断逻辑是:把当前已选的所有规格(比如 {颜色: "红色", 尺寸: "XL"})当作一个完整 key,去 skus 数组里找完全匹配的项,且 stock > 0

  • 后端返回的 skus 必须含明确的规格映射字段,如 spec_value_ids: ["color:red", "size:xl"]spec_str: "red_xl",不能只给个模糊的 sku_code
  • 前端不要自己拼接字符串去比对,容易因顺序错位导致匹配失败;优先用 spec_value_ids 这种结构化数组做 .every() 全字段校验
  • 每次点击都要重算,不能缓存“已禁用列表”,因为用户可能回退修改前面选项,整个可用集就变了

disabled状态必须用 computed 动态生成,不能直接改原始数据

你在 v-for 里渲染规格按钮时,如果直接给原始 specs 数组里的对象加 disabled: trueuni-app 的响应式系统不会触发视图更新——它只监听数组引用或对象属性的新增/删除,不监听已有属性值变更。

jQuery仿京东搜索条件筛选代码
jQuery仿京东搜索条件筛选代码

jQuery仿京东搜索条件筛选代码是一款基于json制作京东商品列表搜索条件筛选,可自定义多个条件筛选功能代码。适用于商城商品快速筛选代码。

下载
  • 正确做法是写一个 computed,例如 availableSpecs,它返回一个新数组,每个项都带 disabled 字段
  • 计算逻辑:先提取当前已选规格 selectedValues,再遍历所有 skus,筛选出满足全部已选条件的子集,最后从该子集中提取当前规格维度的所有合法值,用 new Set() 去重
  • 示例片段:isSpecDisabled(specName, specValue) 内部应调用 skus.filter(sku => Object.keys(selectedValues).every(k => sku.spec_value_ids.includes(`${k}:${selectedValues[k]}`)))

清空后续规格要按顺序截断,不能只删 key

用户先选“XL”,再选“绿色”,此时“红色”按钮应该恢复可点——但如果不清掉“XL”之后的已选状态,selectedValues 还带着旧值,后续过滤永远带着干扰项。

  • 点击某个规格时,先获取它在 specs 中的索引位置,再遍历 selectedValues 的 key,把索引更大的规格全删掉
  • 别用 this.$delete(this.selectedValues, key) 逐个删,容易漏;推荐用 Object.keys(this.selectedValues).forEach(key => { if (allSpecNames.indexOf(key) > currentIndex) this.$delete(this.selectedValues, key) })
  • 注意:allSpecNames 必须和后端返回的 specs 顺序严格一致,否则索引错位会导致清空失效

真机点击失效大概率是缺 cursor:pointer 或事件穿透

开发时看着能点,真机上点了没反应,90% 是样式或事件问题,和算法无关。

  • 给所有规格按钮加 style="cursor: pointer",尤其 H5 端,否则 iOS Safari 默认不触发 click
  • 弹窗层如果用了 @touchmove.stop.prevent,要确认它没拦住下层按钮的 tap 事件;更稳妥的是在按钮上加 @tap.stop
  • 微信小程序里,如果按钮被 scroll-viewswiper 包裹,检查是否设置了 enhanced 属性,未开启时部分事件会丢失
实际跑通的关键不在“怎么写函数”,而在于每一步都依赖上一步的干净状态——selectedValues 必须精确反映当前用户路径,skus 必须结构清晰可匹配,computed 必须不缓存中间结果。任何一环带脏数据,整个联动就会断链。

相关文章

京东
京东

京东app是一款移动购物软件,具有商品搜索/浏览、评论查阅、商品购买、在线支付/货到付款、订单查询、物流跟踪、晒单/评价、返修退换货等功能,为您打造简单、快乐的生活体验。有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

京东 uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1062

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2167

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2080

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2229

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

333

5

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

569

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

10598

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

153

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习