最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于JS實(shí)現(xiàn)的笛卡爾乘積之商品發(fā)布

 更新時(shí)間:2016年05月13日 09:41:31   作者:漫步楓  
本文給大家介紹JS實(shí)現(xiàn)的笛卡爾乘積之商品發(fā)布的相關(guān)內(nèi)容,涉及到j(luò)s笛卡爾積算法的相關(guān)知識(shí),本文介紹的非常詳細(xì),具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧

沒(méi)給大家介紹正文之前先給大家補(bǔ)充點(diǎn)知識(shí):

js笛卡爾積算法

根據(jù)給的對(duì)象或者數(shù)組生成笛卡爾積

//笛卡兒積組合
function descartes(list)
{
//parent上一級(jí)索引;count指針計(jì)數(shù)
var point = {};
var result = [];
var pIndex = null;
var tempCount = 0;
var temp = [];
//根據(jù)參數(shù)列生成指針對(duì)象
for(var index in list)
{
if(typeof list[index] == 'object')
{
point[index] = {'parent':pIndex,'count':0}
pIndex = index;
}
}
//單維度數(shù)據(jù)結(jié)構(gòu)直接返回
if(pIndex == null)
{
return list;
}
//動(dòng)態(tài)生成笛卡爾積
while(true)
{
for(var index in list)
{
tempCount = point[index]['count'];
temp.push(list[index][tempCount]);
}
//壓入結(jié)果數(shù)組
result.push(temp);
temp = [];
//檢查指針最大值問(wèn)題
while(true)
{
if(point[index]['count']+1 >= list[index].length)
{
point[index]['count'] = 0;
pIndex = point[index]['parent'];
if(pIndex == null)
{
return result;
}
//賦值parent進(jìn)行再次檢查
index = pIndex;
}
else
{
point[index]['count']++;
break;
}
}
}
}

好了,關(guān)于js笛卡爾積算法只是給下文做個(gè)鋪墊,不多說(shuō)了,言歸正傳。

一、需求描述

電商網(wǎng)站的商品發(fā)布功能,類似京東的商品詳細(xì)頁(yè),如下圖,這樣的可選擇功能,在后臺(tái)是如何生成的呢,其實(shí)你看到的一個(gè)iphone6在發(fā)布時(shí)并不只是發(fā)布一個(gè)商品,而是很多個(gè),因?yàn)槊恳粋€(gè)選擇出來(lái)的iphone6價(jià)格是不一樣的,那么發(fā)布商品時(shí)這些可選擇項(xiàng)又是從一堆屬性和屬性值中挑選出來(lái)的,問(wèn)題來(lái)了,發(fā)布時(shí)挑選的屬性個(gè)數(shù)是不一樣的,屬性值也是不一樣的,那么生成的商品個(gè)數(shù)是根據(jù)屬性和屬性值組合出來(lái)的。

二、直接上代碼

<script>
/**
* 商品屬性類型
* 一個(gè)屬性個(gè)數(shù)是不確定的
*/
var Spec = function(specName,specItems){
this.specName = specName; //屬性名稱
this.specItems = specItems;//數(shù)值值,是個(gè)數(shù)組,數(shù)組個(gè)數(shù)不確定
}
var result = [];//組合成產(chǎn)品集
/**
* 發(fā)布一款商品選擇的一個(gè)屬性,這是一個(gè)規(guī)格數(shù)組,數(shù)組個(gè)數(shù)不確定
* 根據(jù)這個(gè)選擇的屬性組合成不同的產(chǎn)品
*/
var selectSpec = [{specName:'容量',specItems:['16G','64G','128G']},
{specName:'顏色',specItems:['土豪金','銀色','黑色','pink']},
{specName:'網(wǎng)絡(luò)',specItems:['聯(lián)通','移動(dòng)','電信']}];
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);
/**組合成產(chǎn)品集
* [Object { 容量="16G", 顏色="土豪金", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="16G", 顏色="土豪金", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="16G", 顏色="土豪金", 網(wǎng)絡(luò)="電信"},
* Object { 容量="16G", 顏色="銀色", 網(wǎng)絡(luò)="聯(lián)通"},
* Object { 容量="16G", 顏色="銀色", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="16G", 顏色="銀色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="16G", 顏色="黑色", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="16G", 顏色="黑色", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="16G", 顏色="黑色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="16G", 顏色="pink", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="16G", 顏色="pink", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="16G", 顏色="pink", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="64G", 顏色="土豪金", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="64G", 顏色="土豪金", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="64G", 顏色="土豪金", 網(wǎng)絡(luò)="電信"},
* Object { 容量="64G", 顏色="銀色", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="64G", 顏色="銀色", 網(wǎng)絡(luò)="移動(dòng)"},
* Object { 容量="64G", 顏色="銀色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="64G", 顏色="黑色", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="64G", 顏色="黑色", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="64G", 顏色="黑色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="64G", 顏色="pink", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="64G", 顏色="pink", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="64G", 顏色="pink", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="128G", 顏色="土豪金", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="128G", 顏色="土豪金", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="128G", 顏色="土豪金", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="128G", 顏色="銀色", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="128G", 顏色="銀色", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="128G", 顏色="銀色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="128G", 顏色="黑色", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="128G", 顏色="黑色", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="128G", 顏色="黑色", 網(wǎng)絡(luò)="電信"}, 
* Object { 容量="128G", 顏色="pink", 網(wǎng)絡(luò)="聯(lián)通"}, 
* Object { 容量="128G", 顏色="pink", 網(wǎng)絡(luò)="移動(dòng)"}, 
* Object { 容量="128G", 顏色="pink", 網(wǎng)絡(luò)="電信"}]
*/
</script> 

以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)的笛卡爾乘積之商品發(fā)布的想內(nèi)容,希望對(duì)大家有所幫助,同時(shí)也非常感謝大家對(duì)腳本之家網(wǎng)站的支持,相信我們會(huì)做的更好!

相關(guān)文章

  • Javascript事件熱鍵兼容ie|firefox

    Javascript事件熱鍵兼容ie|firefox

    Javascript熱鍵兼容ie,firefox,需要的朋友可以參考下。
    2010-12-12
  • JavaScript實(shí)現(xiàn)找質(zhì)數(shù)代碼分享

    JavaScript實(shí)現(xiàn)找質(zhì)數(shù)代碼分享

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)找質(zhì)數(shù)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • js實(shí)現(xiàn)兼容IE和FF的上下層的移動(dòng)

    js實(shí)現(xiàn)兼容IE和FF的上下層的移動(dòng)

    本來(lái)是很簡(jiǎn)單的一個(gè)功能,可是一開(kāi)始弄的時(shí)候,還有IE能實(shí)現(xiàn),F(xiàn)F總是不能實(shí)現(xiàn),在網(wǎng)上看了半天,也沒(méi)弄出個(gè)所以然,所以在同事的幫忙下,總算弄出來(lái)了,瀏覽器的兼容性考的還是細(xì)節(jié)上面的東西,所有關(guān)于細(xì)節(jié)的,我會(huì)用注釋標(biāo)出來(lái)的。
    2015-05-05
  • JavaScript實(shí)現(xiàn)全選和全不選操作

    JavaScript實(shí)現(xiàn)全選和全不選操作

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)全選和全不選操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JS中的Date()使用小結(jié)

    JS中的Date()使用小結(jié)

    Date() 日期對(duì)象是一個(gè)構(gòu)造函數(shù)必須使用new來(lái)調(diào)用創(chuàng)建我們的日期對(duì)象,本文給大家介紹JS中的Date()使用小結(jié),感興趣的朋友一起看看吧
    2024-01-01
  • JavaScript Canvas實(shí)現(xiàn)驗(yàn)證碼

    JavaScript Canvas實(shí)現(xiàn)驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了JavaScript Canvas實(shí)現(xiàn)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • bootstrap的常用組件和柵格式布局詳解

    bootstrap的常用組件和柵格式布局詳解

    Bootstrap 是最受歡迎的 HTML、CSS 和 JS 框架,用于開(kāi)發(fā)響應(yīng)式布局、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目,本文介紹了bootstrap的常用組件和柵格式布局詳解,有興趣的可以了解一下
    2017-05-05
  • 詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案

    詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案

    這篇文章主要介紹了詳解用js代碼觸發(fā)dom事件的實(shí)現(xiàn)方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 關(guān)鍵字空格替換為逗號(hào)的js代碼

    關(guān)鍵字空格替換為逗號(hào)的js代碼

    這個(gè)功能主要是方便我們?cè)诎l(fā)布文章時(shí)填寫(xiě)關(guān)鍵字的時(shí)候,不用切換為英文狀態(tài)輸入逗號(hào),他可以將中文逗號(hào)和空格統(tǒng)一轉(zhuǎn)換為英文逗號(hào),提高工作效率。
    2008-11-11
  • Document和Document.all區(qū)別分析

    Document和Document.all區(qū)別分析

    all是一個(gè)集合,包含所有html對(duì)像的集合,寫(xiě)一個(gè)程式,可以存取到所有的對(duì)像。
    2008-11-11

最新評(píng)論

五峰| 泸定县| 二手房| 民勤县| 平阴县| 平昌县| 西贡区| 南澳县| 江门市| 遵义市| 潞西市| 东丰县| 乌兰察布市| 会泽县| 宣威市| 卫辉市| 宣城市| 抚宁县| 拉萨市| 新密市| 泌阳县| 南皮县| 景泰县| 蒙山县| 比如县| 治县。| 铜山县| 来安县| 韩城市| 金寨县| 哈密市| 黎平县| 铅山县| 龙胜| 衡山县| 鄂尔多斯市| 乌拉特中旗| 正镶白旗| 南京市| 克山县| 湟中县|