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 相关文章推荐
flash javascript之间的通讯方法小结
Dec 20 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
Nov 01 Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 Javascript
vue中使用props传值的方法
May 08 Javascript
webpack项目使用eslint建立代码规范实现
May 16 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
vue自定义正在加载动画的例子
Nov 14 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 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安装攻略:常见问题解答(二)
2006/10/09 PHP
PHP基础知识介绍
2013/09/17 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
js同源策略详解
2015/05/21 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
金智子午JAVA面试题
2015/09/04 面试题
关于赌博的检讨书
2014/01/08 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
常务副总经理任命书
2014/06/05 职场文书
护士自荐信范文
2015/03/25 职场文书
中学团支部工作总结
2015/08/13 职场文书
周一问候语大全
2015/11/10 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL