亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

沒給大家介紹正文之前先給大家補充點知識:

js笛卡爾積算法

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

//笛卡兒積組合
function descartes(list)
{
//parent上一級索引;count指針計數(shù)
var point = {};
var result = [];
var pIndex = null;
var tempCount = 0;
var temp = [];
//根據(jù)參數(shù)列生成指針對象
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;
}
//動態(tài)生成笛卡爾積
while(true)
{
for(var index in list)
{
tempCount = point[index]['count'];
temp.push(list[index][tempCount]);
}
//壓入結(jié)果數(shù)組
result.push(temp);
temp = [];
//檢查指針最大值問題
while(true)
{
if(point[index]['count']+1 >= list[index].length)
{
point[index]['count'] = 0;
pIndex = point[index]['parent'];
if(pIndex == null)
{
return result;
}
//賦值parent進行再次檢查
index = pIndex;
}
else
{
point[index]['count']++;
break;
}
}
}
}

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

一、需求描述

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

二、直接上代碼

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

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

相關(guān)文章

  • 深入理解JavaScript中Ajax

    深入理解JavaScript中Ajax

    Ajax不是一種新的編程語言,而是使用現(xiàn)有標(biāo)準(zhǔn)的新方法。本文重點給大家介紹javascript中ajax知識,非常不錯,感興趣的朋友參考下
    2016-08-08
  • JS模擬實現(xiàn)串行加法器

    JS模擬實現(xiàn)串行加法器

    這篇文章主要為大家詳細(xì)介紹了JS模擬實現(xiàn)串行加法器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • IE瀏覽器PNG圖片透明效果代碼

    IE瀏覽器PNG圖片透明效果代碼

    平常,我們經(jīng)常使用Gif格式的圖片以保持圖片在瀏覽器中透明,以支持底色。但由于IE瀏覽器本身的原因,我們無法使透明的PNG圖片透明起來。那么,如何將它在IE瀏覽器下變得透明呢?
    2008-09-09
  • 夯基礎(chǔ)之手撕javascript繼承詳解

    夯基礎(chǔ)之手撕javascript繼承詳解

    這篇文章主要給大家介紹了關(guān)于手撕javascript繼承的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Bootstrap 3多級下拉菜單實例

    Bootstrap 3多級下拉菜單實例

    這篇文章主要為大家詳細(xì)介紹了Bootstrap 3多級下拉菜單實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 使用layer.msg 時間設(shè)置不起作用的解決方法

    使用layer.msg 時間設(shè)置不起作用的解決方法

    今天小編就為大家分享一篇使用layer.msg 時間設(shè)置不起作用的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript 兼容FF的onmouseenter和onmouseleave的代碼

    javascript 兼容FF的onmouseenter和onmouseleave的代碼

    經(jīng)過測試發(fā)現(xiàn),例子1 在 ff下抖動的厲害,ie下稍微有點。 具體原因 其實就是 mouseout 的冒泡機制 引起的。
    2008-07-07
  • 初識javascript 文檔碎片

    初識javascript 文檔碎片

    今天遇到一個問題: 我通過 ajax 取回另一個頁面的 Html 。但這些 HTML 我不想直接輸出,想通過 getElementsByName 處理后再輸出相應(yīng)的內(nèi)容。用原生的 javascript怎樣可以處理呢?
    2010-07-07
  • js實現(xiàn)簡易垂直滾動條

    js實現(xiàn)簡易垂直滾動條

    本文主要介紹了js實現(xiàn)簡易垂直滾動條的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 淺談JavaScript中的分支結(jié)構(gòu)

    淺談JavaScript中的分支結(jié)構(gòu)

    下面小編就為大家?guī)硪黄獪\談JavaScript中的分支結(jié)構(gòu)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論