在向大家介绍课文之前,给大家补充一些知识:
笛卡尔乘积算法。
根据给定的对象或数组生成笛卡尔乘积。
//笛卡尔乘积组合函数笛卡尔(list) {//parent的上指数;计数指针计数var point={ };var结果=[];var pIndex=nullvar tempCount=0;var temp=[];//根据参数列,为(列表中的var index){ if(list[index]==' object '的类型){ point[index]={ ' parent ' : pindex,' count' 33600} pindex=index生成指针对象;} }//一维数据结构直接返回if(pIndex==null){ return list;}//动态生成笛卡尔乘积while (true) {for(列表中的var index){ temp count=point[index][' count '];temp . push(list[index][tempCount]);}//按结果数组result . push(temp);temp=[];//当(true){ if(point[index][' count ']1=list[index]时,检查最大指针值问题。length){ point[index][' count ']=0;pIndex=point[index][' parent '];if(Pindex==null){返回结果;}//再次分配父检查索引=pIndex} else { point[index][' count '];打破;}}}}好了,js笛卡儿积算法只是为后面做铺垫。我不多说。让我们言归正传。
一、需求说明。
电商网站的产品发布功能类似于JD.COM的产品详情页,如下图所示。这个可选函数是如何在后台生成的?事实上,当你看到一台iphone6时,它不仅仅是一个产品,而是很多,因为每台选定的iphone6的价格不同,所以这些可选项目是在发布产品时从一堆属性和属性值中选择的。问题来了,发布时选择的属性数量不一样。
第二,直接代码。
Script/***商品属性类型*属性的数量不确定*/var spec=function (spec name,spec items){ this . spec name=spec name;//属性名this.specItems=specItems//数值,是数组,数组个数不确定}var结果=[];//组合成产品集/* * *发布某商品选择的属性,为规格数组,数组个数不确定*根据选择的属性组合成不同的产品*/var Select spec=[{ spec name : ' capacity ',spec items 3360 ['16g ',' 64g ',' 128g']}。{specName:' color ',specitems 3360[' local gold ',' silver ',' black ',' pink']},{specName:' network ',specitems 3360[' China Unicom ',' mobile ',' telecom ']}];函数combine(index,current){ if(index selectSpec . length-1){ var specItem=selectSpec[index];var keya=specItem.specNamevar items=specItem.specItemsif(items.length==0){run(索引1,当前);} for(var I=0;一.项目.长度;i ){if(!项目[i])继续;var newMap={ };newMap=$。扩展(新地图,当前);new MAp[keya]=items[I];运行(索引1,new map);} } else if(index==SelectSpec . length-1){ var specItem=SelectSpec[index];var keya=specItem.specNamevar items=specItem.specItemsif(items . length==0){ result . push(当前);} for(var I=0;一.项目.长度;i ){if(!项目[i])继续;var newMap={ };newMap=$。扩展(新地图,当前);new MAp[keya]=items[I];result . push(NewMap);}}}combine(0,{ });console.info(结果);/* *组合成产品集*[对象{容量='16G ',颜色='本地金',网络='联通' },*对象{容量='16G ',颜色='本地金',网络='移动' },*对象{容量='16G ',颜色=。*对象{容量='16G ',颜色='银',网络='联通' },*对象{容量='16G ',颜色='银',网络='移动' },*对象{容量='16G ',颜色='银',网络='电信。网络='联通' },*对象{容量='16G ',颜色='黑色',网络='移动' },*对象{容量='16G ',颜色='黑色',网络='电信' },*对象{容量='16G ',颜色='。*对象{容量='16G ',颜色='粉色',网络='移动' },*对象{容量='16G ',颜色='粉色',网络='电信' },*对象{容量='64G ',颜色='本地金',网络=。Color=' local gold ',network=' mobile' },* Object {capacity='64G ',color=' local gold ',network=' telecom' },* Object {capacity='64G ',color=' silver ',network='中国联通' },* Object {。*对象{容量='64G ',颜色='银色',网络='电信' },*对象{容量='64G ',颜色='黑色',网络='中国联通' },*对象{容量='64G ',颜色='黑色',网络='。网络='电信' },*对象{容量='64G ',颜色='粉色',网络='联通' },*对象{容量='64G ',颜色='粉色',网络='移动' },*对象{容量='64G ',颜色。*对象{容量='128G ',颜色='本地金',网络='联通' },*对象{容量='128G ',颜色='本地金',网络='移动' },*对象{容量='128G ',颜色='土。颜色='银',网络='中国联通' },*对象{容量='128G ',颜色='银',网络='移动' },*对象{容量='128G ',颜色='银',网络='电信' },*对象{。*对象{容量='128G ',颜色='黑色',网络='移动' },*对象{容量='128G ',颜色='黑色',网络='电信' },*对象{容量='128G ',颜色='粉色'。Color='pink ',network=' mobile' },* Object {capacity='128G ',color='pink ',network=' telecom ' }]*//脚本以上是边肖介绍的JS实现的基于笛卡尔乘积的商品发布内容。希望对大家有所帮助,也非常感谢大家对我们网站的支持。