`
liu86th
  • 浏览: 114033 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[js] sku组合查找库存数量

 
阅读更多
/* 后端数据 */
var data = {
    "10;20;30": {
        price: 5,
        count: 1
    },
    "10;20;31": {
        price: 10,
        count: 2
    },
    "11;20;30": {
        price: 5,
        count: 1
    },
    "10;21;31": {
        price: 10,
        count: 2
    },
    "10;21;32": {
        price: 10,
        count: 9
    }
}
 
var myData = {},
 
    //可选项key值
    keys = [
        [10, 11, 12],
        [20, 21],
        [30, 31, 32]
        ];
 
//获取 key的库存量
 
function getNum(key) {
    var result = 0,
 
        i, j, m,
 
        items, n = [];
 
    //检查是否已计算过
    if (typeof myData[key] != 'undefined') {
        return myData[key];
    }
 
    items = key.split(";");
 
    //已选择数据是最小路径,直接从已端数据获取
    if (items.length === keys.length) {
        return data[key] ? data[key].count : 0;
    }
 
    //拼接子串
    for (i = 0; i < keys.length; i++) {
        for (j = 0; j < keys[i].length && items.length > 0; j++) {
            if (keys[i][j] == items[0]) {
                break;
            }
        }
 
        if (j < keys[i].length && items.length > 0) {
            //找到该项,跳过
            n.push(items.shift());
        } else {
            //分解求值
            for (m = 0; m < keys[i].length; m++) {
                result += getNum(n.concat(keys[i][m], items).join(";"));
            }
            break;
        }
    }
 
    //缓存
    myData[key] = result;
    return result;
}
 
document.write(getNum("10") + ";"); //输出14
document.write(getNum("11") + ";"); //输出1
document.write(getNum("10;21") + ";"); //输出11
document.write(getNum("21;31") + ";"); //输出2​

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics