sku组合查询算法探讨-之JS实现示例

来源:互联网 发布:ssh建立连接的端口号 编辑:程序博客网 时间:2024/06/05 11:28


/* 后端数据 */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") + ";"); //输出14document.write(getNum("11") + ";"); //输出1document.write(getNum("10;21") + ";"); //输出11document.write(getNum("21;31") + ";"); //输出2​


原创粉丝点击