基于JS实现的笛卡尔乘积之商品发布

前端之家收集整理的这篇文章主要介绍了基于JS实现的笛卡尔乘积之商品发布前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

没给大家介绍正文之前先给大家补充点知识:

js笛卡尔积算法

根据给的对象或者数组生成笛卡尔积

= list[index].length) { point[index]['count'] = 0; pIndex = point[index]['parent']; if(pIndex == null) { return result; } //赋值parent进行再次检查 index = pIndex; } else { point[index]['count']++; break; } } } }

好了,关于js笛卡尔积算法只是给下文做个铺垫,不多说了,言归正传。

一、需求描述

电商网站的商品发布功能,类似京东的商品详细页,如下图,这样的可选择功能,在后台是如何生成的呢,其实你看到的一个iphone6在发布时并不只是发布一个商品,而是很多个,因为每一个选择出来的iphone6价格是不一样的,那么发布商品时这些可选择项又是从一堆属性属性值中挑选出来的,问题来了,发布时挑选的属性个数是不一样的,属性值也是不一样的,那么生成的商品个数是根据属性属性值组合出来的。

二、直接上代码

/** * 商品属性类型 * 一个属性个数是不确定的 */ var Spec = function(specName,specItems){ this.specName = specName; //属性名称 this.specItems = specItems;//数值值,是个数组,数组个数不确定 } var result = [];//组合成产品集 /** * 发布一款商品选择的一个属性,这是一个规格数组,数组个数不确定 * 根据这个选择的属性组合成不同的产品 */ var selectSpec = [{specName:'容量',specItems:['16G','64G','128G']},{specName:'颜色',specItems:['土豪金','银色','黑色','pink']},{specName:'网络',specItems:['联通','移动','电信']}]; function combine(index,current){ if (index < selectSpec.length - 1){ var specItem = selectSpec[index]; var keya = specItem.specName; var items = specItem.specItems; if(items.length==0){ run( index + 1,current); } for (var i = 0; i < items.length; i++){ if(!items[i])continue; var newMap = {}; newMap = $.extend(newMap,current); newMap[keya] = items[i]; run( index + 1,newMap); } }else if (index == selectSpec.length - 1){ var specItem = selectSpec[index]; var keya = specItem.specName; var items = specItem.specItems; if(items.length==0){ result.push(current); } for (var i = 0; i < items.length; i++){ if(!items[i])continue; var newMap = {}; newMap = $.extend(newMap,current); newMap[keya] = items[i]; result.push(newMap); } } } combine(0,{}); console.info(result); /**组合成产品集 * [Object { 容量="16G",颜色="土豪金",网络="联通"},* Object { 容量="16G",网络="移动"},网络="电信"},颜色="银色",颜色="黑色",颜色="pink",* Object { 容量="64G",* Object { 容量="128G",网络="电信"}] */

以上所述是小编给大家介绍的基于JS实现的笛卡尔乘积之商品发布的想内容,希望对大家有所帮助,同时也非常感谢大家对编程之家网站的支持,相信我们会做的更好!

猜你在找的JavaScript相关文章