全网整合营销服务商

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

免费咨询热线: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规格选择  # 可选  # 所选  # 单品  # 这是  # 数据格式  # 就能  # 写了  # 这几天  # 这篇文章  # 即是  # 谢谢大家  # 借着  # 写过  # 键值  # 物流管理  # 过程中  # 生产日期  # 配送中心  # 连锁超市  # 下次 


相关文章: SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  网站制作免费,什么网站能看正片电影?  如何在万网主机上快速搭建网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何打造高效商业网站?建站目的决定转化率  网站制作服务平台,有什么网站可以发布本地服务信息?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在VPS电脑上快速搭建网站?  ,想在网上投简历,哪几个网站比较好?  如何通过VPS建站无需域名直接访问?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何在Tomcat中配置并部署网站项目?  已有域名和空间,如何快速搭建网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  ,柠檬视频怎样兑换vip?  如何高效利用亚马逊云主机搭建企业网站?  深圳网站制作的公司有哪些,dido官方网站?  营销式网站制作方案,销售哪个网站招聘效果最好?  建站之星×万网:智能建站系统+自助建站平台一键生成  简历在线制作网站免费,免费下载个人简历的网站是哪些?  网站制作壁纸教程视频,电脑壁纸网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  小程序网站制作需要准备什么资料,如何制作小程序?  如何高效配置香港服务器实现快速建站?  网站制作软件有哪些,制图软件有哪些?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  Android滚轮选择时间控件使用详解  seo网站制作优化,网站SEO优化步骤有哪些?  深圳网站制作培训,深圳哪些招聘网站比较好?  寿县云建站:智能SEO优化与多行业模板快速上线指南  Swift开发中switch语句值绑定模式  七夕网站制作视频,七夕大促活动怎么报名?  高防服务器租用如何选择配置与防御等级?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  简历在线制作网站免费版,如何创建个人简历?  c# 在高并发场景下,委托和接口调用的性能对比  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  建站之星安装步骤有哪些常见问题?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何快速选择适合个人网站的云服务器配置?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  宝塔新建站点报错如何解决?  如何快速搭建FTP站点实现文件共享?  教程网站设计制作软件,怎么创建自己的一个网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何配置支付宝与微信支付功能? 

您的项目需求

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