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 相关文章推荐
载入进度条 效果
Jul 08 Javascript
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
Domino中运用jQuery读取视图内容的方法
Oct 21 Javascript
js indexOf()定义和用法
Oct 21 Javascript
JavaScript 垃圾回收机制分析
Oct 10 Javascript
jquery解析xml字符串简单示例
Apr 11 Javascript
js返回前一页刷新本页重载页面
Jul 29 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
vue iview实现动态新增和删除
Jun 17 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实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
详解JavaScript函数
2015/12/01 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
js闭包用法实例详解
2016/12/13 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Django模板Templates使用方法详解
2019/07/19 Python
大数据分析用java还是Python
2020/07/06 Python
美国钻石商店:Zales
2016/11/20 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
本科毕业生自荐信
2014/05/26 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
师德师风剖析材料
2014/09/30 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL