的樣品,你可以嘗試使用一個結構和功能檢查
如果任何先決條件將被設置爲null
如果一個 - 將設置字符串名稱如果幾個有或
- 將使用對象{or: ["task1","task2"...]}
如果幾個與和 - 將使用對象{and: ["task1","task2"...]}
也結合 - 將使用對象像{and: [{or:["task1","task2"]},"task3",{or:{"task5"...}}]}
所以樣本的任務列表可能是這樣
var myObj = {
task1: {name: 'Hello', prereq:null, selected: false},
task2: {name: 'World', prereq:'task1', selected: false},
task3: {name: 'Foo', prereq:{or:["task4","task2"]}, selected: false},
task4: {name: 'Bar', prereq:null, selected: false},
task5: {name: 'Baz', prereq:{and:[{or: ["task4","task6"]},"task1"]}, selected: false},
task6: {name: 'Barrr', prereq:null, selected: false}
};
檢查使用功能類似
function preq(arr,config){
if(!config) return true;
if(typeof config === "string") return arr[config].selected;
if('or' in config){
for(var i=0,L=config['or'].length;i<L;i++){
if(preq(arr,config['or'][i])) return true;
}
return false;
}
if('and' in config){
for(var i=0,L=config['and'].length;i<L;i++){
if(!preq(arr,config['and'][i])) return false;
}
return true;
}
return false;
}
你也可以檢查JSFiiddle
你可以使用評分系統......每個任務都有一個分數,你必須檢查最低分數值。 – rafaelcastrocouto
你可以嘗試使用一些數據結構而不是字符串 – Grundy
如何使用這個? – Grundy