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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
JavaScript XML操作 封装类
Jul 01 Javascript
详述JavaScript实现继承的几种方式(推荐)
Mar 22 Javascript
JS事件添加和移出的兼容写法示例
Jun 20 Javascript
JS获取checkbox的个数简单实例
Aug 19 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
js轮播图的插件化封装详解
Jul 17 Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
Angularjs过滤器实现动态搜索与排序功能示例
Dec 13 Javascript
小程序实现新用户判断并跳转激活的方法
May 20 Javascript
基于vue实现探探滑动组件功能
May 29 Javascript
js实现简单的轮播图效果
Dec 13 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四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
BootStrapValidator初使用教程详解
2017/02/10 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
js实现全选和全不选
2020/07/28 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python计算N天之后日期的方法
2015/03/31 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python中if有多个条件处理方法
2020/02/26 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
4S店售后客服自我评价
2014/04/09 职场文书
教师病假条范文
2015/08/17 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS