Advertisement
Guest User

Untitled

a guest
Dec 27th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. /* 后端数据 */
  2. var data = {
  3. "10;20;30": {
  4. price: 5,
  5. count: 1
  6. },
  7. "10;20;31": {
  8. price: 10,
  9. count: 2
  10. },
  11. "11;20;30": {
  12. price: 5,
  13. count: 1
  14. },
  15. "10;21;31": {
  16. price: 10,
  17. count: 2
  18. },
  19. "10;21;32": {
  20. price: 10,
  21. count: 9
  22. }
  23. }
  24.  
  25. var myData = {},
  26.  
  27. //可选项key值
  28. keys = [
  29. [10, 11, 12],
  30. [20, 21],
  31. [30, 31, 32]
  32. ];
  33.  
  34. //获取 key的库存量
  35.  
  36. function getNum(key) {
  37. var result = 0,
  38.  
  39. i, j, m,
  40.  
  41. items, n = [];
  42.  
  43. //检查是否已计算过
  44. if (typeof myData[key] != 'undefined') {
  45. return myData[key];
  46. }
  47.  
  48. items = key.split(";");
  49.  
  50. //已选择数据是最小路径,直接从已端数据获取
  51. if (items.length === keys.length) {
  52. return data[key] ? data[key].count : 0;
  53. }
  54.  
  55. //拼接子串
  56. for (i = 0; i < keys.length; i++) {
  57. for (j = 0; j < keys[i].length && items.length > 0; j++) {
  58. if (keys[i][j] == items[0]) {
  59. break;
  60. }
  61. }
  62.  
  63. if (j < keys[i].length && items.length > 0) {
  64. //找到该项,跳过
  65. n.push(items.shift());
  66. } else {
  67. //分解求值
  68. for (m = 0; m < keys[i].length; m++) {
  69. result += getNum(n.concat(keys[i][m], items).join(";"));
  70. }
  71. break;
  72. }
  73. }
  74.  
  75. //缓存
  76. myData[key] = result;
  77. return result;
  78. }
  79.  
  80. document.write(getNum("10") + ";"); //输出14
  81. document.write(getNum("11") + ";"); //输出1
  82. document.write(getNum("10;21") + ";"); //输出11
  83. document.write(getNum("21;31") + ";"); //输出2​
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement