-
-
Save bensontung/ba80b4d72ab8a1513939 to your computer and use it in GitHub Desktop.
fast way to find path
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 后端数据 */ | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment