当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript算法教程之sku(库存量单位)详解

JavaScript算法教程之sku(库存量单位)详解

2017年12月12日  | 移动技术网IT编程  | 我要评论
前言 这几天公司出的题目,之前项目中写过一个类似的,但是写的很猥琐(一些表现是通过频繁操作dom实现的),借着有奖励的机会重写了一下。 sku: sku=stoc

前言

这几天公司出的题目,之前项目中写过一个类似的,但是写的很猥琐(一些表现是通过频繁操作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;
 }
}

(应该拉下来就能跑,页面展示用的jquery,因为当前项目需要,换成mvvm框架页面表现会更加简单)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网