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代码
Oct 30 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
2014年50个程序员最适用的免费JQuery插件
Dec 15 Javascript
JS动画效果打开、关闭层的实现方法
May 09 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
Dec 14 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
Jul 01 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
详解JS浏览器事件循环机制
Mar 27 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php 获取客户端的真实ip
2009/11/30 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
JS的参数传递示例介绍
2014/02/08 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Python自动扫雷实现方法
2015/07/25 Python
深入解析Python中的线程同步方法
2016/06/14 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
pyhton列表转换为数组的实例
2018/04/04 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Python实现括号匹配方法详解
2020/02/10 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
自荐信封面
2013/12/04 职场文书
公司司机岗位职责
2014/02/07 职场文书
伦敦奥运会口号
2014/06/13 职场文书
农业生产宣传标语
2014/10/08 职场文书
六年级学生评语大全
2014/12/26 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL