全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript算法教程之sku(库存量单位)详解

前言

这几天公司出的题目,之前项目中写过一个类似的,但是写的很猥琐(一些表现是通过频繁操作DOM实现的),借着有奖励的机会重写了一下。

sku:

SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。单品:对一种商品而言,当其品牌、型号、配置、等级、花色、包装容量、单位、生产日期、保质期、用途、价格、产地等属性与其他商品存在不同时,可称为一个单品。

以上摘自百度百科

思路:

通过字典键值对(在JavaScript中即是Object数据类型)的方式来查找对应可选属性。

难点:

在于所确定属性的同级可选属性。

实现步骤:

  1. 将拿到的数据重新组织成需要展示的数据格式、计算使用的字典数据格式、以及计算过程中需要的一些辅助数据。
  2. 获取页面的所选的属性。
  3. 根据所选属性组成查找key来查找结果。
  4. 将结果缓存,方便下次加速查找。
  5. 表现到页面。
  6. 确定商品。

核心代码:

/**
 * 得到结果
 * @param {string} key 查找关键字以;分割
 * @return {array} 所有可选属性数组
*/
getResult(key, isRealFind = true) {
 // 如缓存中存在,则直接返回结果
 if (this.cacheData[key] && isRealFind) {
 this.result = this.cacheData[key];
 this.resultID = this.goodsDict[key] ? this.goodsDict[key] : '';
 console.log(this.resultID);
 return this.result;
 }
 // 继续查找
 let result = '';
 for (let _key in this.goodsDict) {
 let keyArr = key.split(';');
 let _keyArr = _key.split(';');
 let arr = keyArr.concat(_keyArr);
 arr = Array.from(new Set(arr));
 if (arr.length === _keyArr.length) {
 result += _key;
 }
 }
 if (isRealFind) {
 // 所有可选属性
 this.result = result.split(';');
 let _keyArr = key.split(';');
 if (_keyArr[_keyArr.length - 1] === '') {
 _keyArr.pop();
 }
 for (let i = 0; i < _keyArr.length; i++) {
 let _arr = key.split(';');
 let str = _arr.splice(i, 1);
 let oldResult = this.getResult(_arr.join(';'), false);
 let index = '';
 // 获取该key所在索引
 this.allKeys.forEach((item, i) => {
 if (item.indexOf(str.join('')) !== -1) {
  index = i;
  return;
 }
 });
 this.allKeys[index].forEach(item => {
 if (oldResult.indexOf(item) !== -1) {
  this.result.push(item);
 }
 });
 }
 this.result = Array.from(new Set(this.result));
 // 缓存数据
 this.cacheData[key] = this.result;
 this.resultID = this.goodsDict[key] ? this.goodsDict[key] : '';
 console.log(this.resultID);
 return this.result;
 } else {
 return result;
 }
}

github地址 (应该拉下来就能跑,页面展示用的jQuery,因为当前项目需要,换成mvvm框架页面表现会更加简单)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# js  # sku  # 规格选择  # 算法  # sku算法  # sku规格选择  # 可选  # 所选  # 单品  # 这是  # 数据格式  # 就能  # 写了  # 这几天  # 这篇文章  # 即是  # 谢谢大家  # 借着  # 写过  # 键值  # 物流管理  # 过程中  # 生产日期  # 配送中心  # 连锁超市  # 下次 


相关文章: 重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何在新浪SAE免费搭建个人博客?  如何通过万网虚拟主机快速搭建网站?  python的本地网站制作,如何创建本地站点?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  实例解析Array和String方法  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何配置WinSCP新建站点的密钥验证步骤?  c# 服务器GC和工作站GC的区别和设置  建站之星CMS建站配置指南:模板选择与SEO优化技巧  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  购物网站制作公司有哪些,哪个购物网站比较好?  小程序网站制作需要准备什么资料,如何制作小程序?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  广州商城建站系统开发成本与周期如何控制?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  制作网页的网站有哪些,电脑上怎么做网页?  微信小程序 input输入框控件详解及实例(多种示例)  定制建站是什么?如何实现个性化需求?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  制作农业网站的软件,比较好的农业网站推荐一下?  建站之星如何实现网站加密操作?  如何用IIS7快速搭建并优化网站站点?  建站之星如何修改网站生成路径?  宝塔Windows建站如何避免显示默认IIS页面?  C#怎么使用委托和事件 C# delegate与event编程方法  javascript中对象的定义、使用以及对象和原型链操作小结  如何撰写建站申请书?关键要点有哪些?  香港服务器租用费用高吗?如何避免常见误区?  ppt制作免费网站有哪些,ppt模板免费下载网站?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  魔毅自助建站系统:模板定制与SEO优化一键生成指南  制作销售网站教学视频,销售网站有哪些?  如何在建站之星网店版论坛获取技术支持?  外贸公司网站制作哪家好,maersk船公司官网?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站主机是什么?如何选择适合的建站主机?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  定制建站哪家更专业可靠?推荐榜单揭晓  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  内网网站制作软件,内网的网站如何发布到外网?  如何快速上传自定义模板至建站之星?  建站主机选购指南:核心配置优化与品牌推荐方案  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  广州建站公司哪家好?十大优质服务商推荐  建站之星代理如何获取技术支持?  建站主机系统SEO优化与智能配置核心关键词操作指南  齐河建站公司:营销型网站建设与SEO优化双核驱动策略 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。