第一種數據結構:
activities = [ { name: "first activity", sign_ups: [], bids: [] }, { name: "first activity", sign_ups: [ { name: "仝鍵", phone: "13600000000" }, { name: "於碩", phone: "15600000000" }, { name: "吳京川", phone: "13800000000" } ], bids: [ { name: "競價1", biddings: [ { name: "仝鍵", phone: "13600000000", price: "12" }, { name: "於碩", phone: "15600000000", price: "10" } ] }, { name: "競價2", biddings: [ { name: "仝鍵", phone: "13600000000", price: "10" }, { name: "於碩", phone: "15600000000", price: "12" }, { name: "吳京川", phone: "13800000000", price: "10" } ] } ] } ];
第一種數據結構採用一個數組中存儲兩個 兩個對象,每個對象又分別存儲各自信息。其中第二個對象的結構爲{name: "",sign_ups: "",bids: ""},biddings則存儲在bids數組裏,這種結構明顯感覺嵌套比較多,結構清晰但存取或更改數據比較困難。
下面是創建一個新的競價:
Bid.create_new_bid = function(name){
var bid = new Bid("first activity");
var activities = JSON.parse(localStorage.activities);
activities = _.map(activities, function(activities){
activities.name == localStorage.current_activity ? activities.bids.push(bid) : '';
return activities
});
localStorage.setItem('activities',JSON.stringify(activities));
}
數據層比較多,存儲複雜。
第二種數據結構:
activities = { "0": { name: "first activity", sign_ups: [], bids: [], biddings: {} }, "1": { name: "second activity", sign_ups: [ { name: "仝鍵", phone: "13600000000" }, { name: "於碩", phone: "15600000000" }, { name: "吳京川", phone: "13800000000" } ], bids: ["競價1", "競價2"], biddings: { "競價1": [ { phone: "13600000000", price: "12" }, { phone: "15600000000", price: "10" } ], "競價2": [ { phone: "13600000000", price: "10" }, { phone: "15600000000", price: "12" }, { phone: "13800000000", price: "10" } ] } } };
第二種數據結構採用和第一種類似的結構,所有數據都存儲在activities,activities中每個對象再分配一個id,總體格式是{{"0":""},{"1":""}},每個對象存儲格式是{name: "",sign_ups: "",bids: "" , biddings: ""}
sign_ups中存儲報名信息,biddings中存儲競價信息。存取都在一個數組裏,比較清晰。
下面是根據phone取報名人姓名的方法:
Bidding.successful_of_people_name = function(activity, bid){ var activities = JSON.parse(localStorage.activities); var sign_ups=activities[activity].sign_ups; var phone = Bidding.count_price_first_information(activity, bid).phone var people_name = _.find(sign_ups,function(sign_ups){ return sign_ups.phone == phone }) return people_name.name }
第三種數據結構:
activities = [ { id: "0", name: "first activity" }, { id: "1", name: "second activity" } ]; sign_ups = [ { name: "仝鍵", phone: "13600000000", activity_id: "0" }, { name: "於碩", phone: "15600000000", activity_id: "0" }, { name: "吳京川", phone: "13800000000", activity_id: "0" }, { name: "仝", phone: "13600000000", activity_id: "1" }, { name: "於", phone: "15600000000", activity_id: "1" }, { name: "吳", phone: "13800000000", activity_id: "1" } ] bids = [ { name: "競價1", activity_name: "0", biddings: [ { phone: "13600000000", price: "9" }, { phone: "15600000000", price: "10" } ] }, { name: "競價1", activity_id: "1", biddings: [ { phone: "13600000000", price: "12" }, { phone: "15600000000", price: "10" } ] }, { name: "競價2", activity_id: "1", biddings: [ { phone: "13600000000", price: "10" }, { phone: "15600000000", price: "12" }, { phone: "13800000000", price: "10" } ] } ];
第三種數據結構定義了三個數組,分別是activities,sign_ups,bids。
特點是:數據分開存儲,存取更加簡單,但數據多且分散,結構不明顯。
其中activities的結構是[{id:"",name:""}],每當創建一個活動時就相應給這個活動一個對應的id,可通過id更簡單的存取數據。
下面是查找報名人姓名的方法:
Bidding.of_people_name = function(sms_json){ var sign_ups = JSON.parse(localStorage.sign_ups) return _.find(sign_ups,function(sign_up){ return sign_up.phone == sms_json.messages[0].phone && sign_up.activity_id == localStorage.current_activity }) }
相比於第二種能夠明顯體會到第三種數據結構存取方便但判斷條件增加了。