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 相关文章推荐
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
Jul 25 Javascript
js获取本机的外网/广域网ip地址完整源码
Aug 12 Javascript
extjs4 treepanel动态改变行高度示例
Dec 17 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
javascript学习笔记(一)基础知识
Sep 30 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
关于ES6的六个小特性(二)
Feb 20 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
Vue render深入开发讲解
Apr 13 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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学习笔记汇总
2014/10/05 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python数据结构之链表详解
2017/09/12 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
django使用admin站点上传图片的实例
2019/07/28 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
领导证婚人证婚词
2014/01/13 职场文书
经济贸易系求职信
2014/08/04 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年医务科工作总结
2014/12/18 职场文书
银行招聘自荐信
2015/03/06 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
Python如何让字典保持有序排列
2022/04/29 Python