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


Posted in Javascript onJune 29, 2017

前言

这几天公司出的题目,之前项目中写过一个类似的,但是写的很猥琐(一些表现是通过频繁操作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框架页面表现会更加简单)

总结

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

Javascript 相关文章推荐
Javascript 表单之间的数据传递代码
Dec 04 Javascript
js正则表达式的使用详解
Jul 09 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
一个不错的js html页面倒计时可精确到秒
Oct 22 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
bootstrap table表格使用方法详解
Apr 26 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
vue指令做滚动加载和监听等
May 26 Javascript
vue 调用 RESTful风格接口操作
Aug 11 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 Javascript
JavaScript实现4位随机验证码的生成
Jan 28 Javascript
详解webpack自动生成html页面
Jun 29 #Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 #Javascript
详解webpack分包及异步加载套路
Jun 29 #Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 #Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 #Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
You might like
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
javascript中this关键字详解
2016/12/12 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python复制文件的方法实例详解
2015/05/22 Python
Python时间获取及转换知识汇总
2017/01/11 Python
Python实现ping指定IP的示例
2018/06/04 Python
python斐波那契数列的计算方法
2018/09/27 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python 瀑布线指标编写实例
2020/06/03 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
Java基础面试题
2014/07/19 面试题
超市重阳节活动方案
2014/02/10 职场文书
货车司机岗位职责
2014/03/18 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
人力资源部岗位职责
2015/02/11 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技