Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* 后端数据 */
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement