SKU组合查询算法代码-实例二
来源:互联网 发布:非线性优化 编辑:程序博客网 时间:2024/05/18 23:29
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Debug SKU</title><link type="text/css" rel="stylesheet" href="css/shCore.css" /><link type="text/css" rel="stylesheet" href="css/shCoreDefault.css"/><script type="text/javascript" src="js/jquery.js"></script><script type="text/javascript" src="js/json2.js"></script><script type="text/javascript" src="js/shCore.js"></script><script type="text/javascript" src="js/shBrushJScript.js"></script><script type="text/javascript">SyntaxHighlighter.all();</script><style type="text/css">.bh-sku-selected {color: red;}</style><script type="text/javascript">var startTime = new Date().getTime();//销售属性集var keys = [ ['10'], ['20','21','22','23','24'], ['30','31','32','33','34','35','36','37','38'], ['40'] ]; //后台读取结果集var data = { "10;24;31;40": { price:366, count:46 }, "10;24;32;40": { price:406, count:66 }, "10;24;33;40": { price:416, count:77 }, "10;24;34;40": { price:456, count:9 }, "10;24;35;40": { price:371, count:33 }, "10;24;36;40": { price:411, count:79 }, "10;24;37;40": { price:421, count:87 }, "10;24;38;40": { price:461, count:9 }, "10;24;30;40": { price:356, count:59 }, "10;23;31;40": { price:366, count:50 }, "10;23;32;40": { price:406, count:9 }, "10;23;33;40": { price:416, count:90 }, "10;23;34;40": { price:456, count:10 }, "10;23;35;40": { price:371, count:79 }, "10;23;36;40": { price:411, count:90 }, "10;23;37;40": { price:421, count:10 }, "10;23;38;40": { price:461, count:9 }, "10;23;30;40": { price:356, count:46 }, "10;22;31;40": { price:356, count:27 }, "10;22;32;40": { price:396, count:38 }, "10;22;33;40": { price:406, count:42 }, "10;22;34;40": { price:446, count:50 }, "10;22;35;40": { price:361, count:25 }, "10;22;36;40": { price:401, count:40 }, "10;22;37;40": { price:411, count:43 }, "10;22;38;40": { price:451, count:42 }, "10;21;31;40": { price:366, count:79 }, "10;21;32;40": { price:406, count:79 }, "10;21;33;40": { price:416, count:10 }, "10;21;34;40": { price:456, count:10 }, "10;21;35;40": { price:371, count:87 }, "10;21;36;40": { price:411, count:10 }, "10;21;37;40": { price:421, count:10 }, "10;21;38;40": { price:461, count:80 }, "10;21;30;40": { price:356, count:43 }, "10;20;31;40": { price:356, count:46 }, "10;20;32;40": { price:396, count:49 }, "10;20;33;40": { price:406, count:65 }, "10;20;34;40": { price:446, count:10 }, "10;20;35;40": { price:361, count:34 }, "10;20;36;40": { price:401, count:41 }, "10;20;37;40": { price:411, count:36 }, "10;20;38;40": { price:451, count:42 }, "10;20;30;40": { price:346, count: 3 }}//保存最后的组合结果信息var SKUResult = {};//获得对象的keyfunction getObjKeys(obj) { if (obj !== Object(obj)) throw new TypeError('Invalid object'); var keys = []; for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) keys[keys.length] = key; return keys;}//把组合的key放入结果集SKUResultfunction add2SKUResult(combArrItem, sku) { var key = combArrItem.join(";"); if(SKUResult[key]) {//SKU信息key属性· SKUResult[key].count += sku.count; SKUResult[key].prices.push(sku.price); } else { SKUResult[key] = { count : sku.count, prices : [sku.price] }; }}//初始化得到结果集function initSKU() { var i, j, skuKeys = getObjKeys(data); for(i = 0; i < skuKeys.length; i++) { var skuKey = skuKeys[i];//一条SKU信息key var sku = data[skuKey]; //一条SKU信息value var skuKeyAttrs = skuKey.split(";"); //SKU信息key属性值数组 skuKeyAttrs.sort(function(value1, value2) { return parseInt(value1) - parseInt(value2); }); //对每个SKU信息key属性值进行拆分组合 var combArr = combInArray(skuKeyAttrs); for(j = 0; j < combArr.length; j++) { add2SKUResult(combArr[j], sku); } //结果集接放入SKUResult SKUResult[skuKeyAttrs.join(";")] = { count:sku.count, prices:[sku.price] } } var dataStr = ''; var index = 0; for (var kk in SKUResult) { dataStr += (JSON.stringify(kk) + "\n"); index++; }}/** * 从数组中生成指定长度的组合 * 方法: 先生成[0,1...]形式的数组, 然后根据0,1从原数组取元素,得到组合数组 */function combInArray(aData) { if(!aData || !aData.length) { return []; } var len = aData.length; var aResult = []; for(var n = 1; n < len; n++) { var aaFlags = getCombFlags(len, n); while(aaFlags.length) { var aFlag = aaFlags.shift(); var aComb = []; for(var i = 0; i < len; i++) { aFlag[i] && aComb.push(aData[i]); } aResult.push(aComb); } } return aResult;}/** * 得到从 m 元素中取 n 元素的所有组合 * 结果为[0,1...]形式的数组, 1表示选中,0表示不选 */function getCombFlags(m, n) { if(!n || n < 1) { return []; } var aResult = []; var aFlag = []; var bNext = true; var i, j, iCnt1; for (i = 0; i < m; i++) { aFlag[i] = i < n ? 1 : 0; } aResult.push(aFlag.concat()); while (bNext) { iCnt1 = 0; for (i = 0; i < m - 1; i++) { if (aFlag[i] == 1 && aFlag[i+1] == 0) { for(j = 0; j < i; j++) { aFlag[j] = j < iCnt1 ? 1 : 0; } aFlag[i] = 0; aFlag[i+1] = 1; var aTmp = aFlag.concat(); aResult.push(aTmp); if(aTmp.slice(-n).join("").indexOf('0') == -1) { bNext = false; } break; } aFlag[i] == 1 && iCnt1++; } } return aResult;} //初始化用户选择事件$(function() { initSKU(); var endTime = new Date().getTime(); $('#init_time').text('init sku time: ' + (endTime - startTime) + " ms"); $('.sku').each(function() { var self = $(this); var attr_id = self.attr('attr_id'); if(!SKUResult[attr_id]) { self.attr('disabled', 'disabled'); } }).click(function() { var self = $(this); //选中自己,兄弟节点取消选中 self.toggleClass('bh-sku-selected').siblings().removeClass('bh-sku-selected'); //已经选择的节点 var selectedObjs = $('.bh-sku-selected'); if(selectedObjs.length) { //获得组合key价格 var selectedIds = []; selectedObjs.each(function() { selectedIds.push($(this).attr('attr_id')); }); selectedIds.sort(function(value1, value2) { return parseInt(value1) - parseInt(value2); }); var len = selectedIds.length; var prices = SKUResult[selectedIds.join(';')].prices; var maxPrice = Math.max.apply(Math, prices); var minPrice = Math.min.apply(Math, prices); $('#price').text(maxPrice > minPrice ? minPrice + "-" + maxPrice : maxPrice); $('#count').text(SKUResult[selectedIds.join(';')].count); //用已选中的节点验证待测试节点 underTestObjs $(".sku").not(selectedObjs).not(self).each(function() { var siblingsSelectedObj = $(this).siblings('.bh-sku-selected'); var testAttrIds = [];//从选中节点中去掉选中的兄弟节点 if(siblingsSelectedObj.length) { var siblingsSelectedObjId = siblingsSelectedObj.attr('attr_id'); for(var i = 0; i < len; i++) { (selectedIds[i] != siblingsSelectedObjId) && testAttrIds.push(selectedIds[i]); } } else { testAttrIds = selectedIds.concat(); } testAttrIds = testAttrIds.concat($(this).attr('attr_id')); testAttrIds.sort(function(value1, value2) { return parseInt(value1) - parseInt(value2); }); if(!SKUResult[testAttrIds.join(';')]) { $(this).attr('disabled', 'disabled').removeClass('bh-sku-selected'); } else { $(this).removeAttr('disabled'); } }); } else { //设置默认价格 $('#price').text('--'); //设置属性状态 $('.sku').each(function() { SKUResult[$(this).attr('attr_id')] ? $(this).removeAttr('disabled') : $(this).attr('disabled', 'disabled').removeClass('bh-sku-selected'); }) } });});</script></head><body><div>属性1:<input type="button" class="sku" attr_id="10" value="10"/></div><div>属性2:<input type="button" class="sku" attr_id="20" value="20"/><input type="button" class="sku" attr_id="21" value="21"/><input type="button" class="sku" attr_id="22" value="22"/><input type="button" class="sku" attr_id="23" value="23"/><input type="button" class="sku" attr_id="24" value="24"/></div><div>属性3:<input type="button" class="sku" attr_id="30" value="30"/><input type="button" class="sku" attr_id="31" value="31"/><input type="button" class="sku" attr_id="32" value="32"/><input type="button" class="sku" attr_id="33" value="33"/><input type="button" class="sku" attr_id="34" value="34"/><input type="button" class="sku" attr_id="35" value="35"/><input type="button" class="sku" attr_id="36" value="36"/><input type="button" class="sku" attr_id="37" value="37"/><input type="button" class="sku" attr_id="38" value="38"/></div><div>属性4:<input type="button" class="sku" attr_id="40" value="40"/></div><span id="init_time">init sku time: </span> </br><span id="price">--</span> </br><span id="count">--</span> </br><pre class="brush: js;">//销售属性集var keys = [ ['10'], ['20','21','22','23','24'], ['30','31','32','33','34','35','36','37','38'], ['40'] ]; //后台读取结果集var data = { "10;24;31;40": { price:366, count:46 }, "10;24;32;40": { price:406, count:66 }, "10;24;33;40": { price:416, count:77 }, "10;24;34;40": { price:456, count:9 }, "10;24;35;40": { price:371, count:33 }, "10;24;36;40": { price:411, count:79 }, "10;24;37;40": { price:421, count:87 }, "10;24;38;40": { price:461, count:9 }, "10;24;30;40": { price:356, count:59 }, "10;23;31;40": { price:366, count:50 }, "10;23;32;40": { price:406, count:9 }, "10;23;33;40": { price:416, count:90 }, "10;23;34;40": { price:456, count:10 }, "10;23;35;40": { price:371, count:79 }, "10;23;36;40": { price:411, count:90 }, "10;23;37;40": { price:421, count:10 }, "10;23;38;40": { price:461, count:9 }, "10;23;30;40": { price:356, count:46 }, "10;22;31;40": { price:356, count:27 }, "10;22;32;40": { price:396, count:38 }, "10;22;33;40": { price:406, count:42 }, "10;22;34;40": { price:446, count:50 }, "10;22;35;40": { price:361, count:25 }, "10;22;36;40": { price:401, count:40 }, "10;22;37;40": { price:411, count:43 }, "10;22;38;40": { price:451, count:42 }, "10;21;31;40": { price:366, count:79 }, "10;21;32;40": { price:406, count:79 }, "10;21;33;40": { price:416, count:10 }, "10;21;34;40": { price:456, count:10 }, "10;21;35;40": { price:371, count:87 }, "10;21;36;40": { price:411, count:10 }, "10;21;37;40": { price:421, count:10 }, "10;21;38;40": { price:461, count:80 }, "10;21;30;40": { price:356, count:43 }, "10;20;31;40": { price:356, count:46 }, "10;20;32;40": { price:396, count:49 }, "10;20;33;40": { price:406, count:65 }, "10;20;34;40": { price:446, count:10 }, "10;20;35;40": { price:361, count:34 }, "10;20;36;40": { price:401, count:41 }, "10;20;37;40": { price:411, count:36 }, "10;20;38;40": { price:451, count:42 }, "10;20;30;40": { price:346, count: 3 }}</pre></span></body></html>
阅读全文
0 0
- SKU组合查询算法代码-实例二
- sku组合查询算法探索
- sku组合查询算法探索
- sku组合查询算法探索
- sku组合查询算法探讨
- 淘宝SKU组合查询算法实现
- 淘宝SKU组合查询算法实现
- 淘宝SKU组合查询算法实现
- 淘宝SKU组合查询算法实现
- 购物车多sku组合查询算法
- sku组合查询算法探讨-之JS实现示例
- 商城sku选择组合
- 仿淘宝sku组合
- 淘宝sku的组合
- 组合查询(二)
- 组合查询实现代码
- 淘宝组合查询算法
- sku属性组合小例子
- Get和Post请求的区别
- DX,DevExpress中的RichEditControl如何替换选中的文字
- WOJ1064-What is Left
- EVC
- Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
- SKU组合查询算法代码-实例二
- 不留痕迹的清除部分history历史命令记录
- Android中视频播放器JCVideoPlayerStandard
- 1017:字符串正反连接
- CCF试题——相邻数对
- 已收录办公界黑马,实用的pdf在线转换器
- God bless me
- torch for Mac OS X安装
- 刘晓庆8段感情都传奇, 当过小三为姜文掏心掏肺现得富商老公进军微电商!