我有一些從Taffy數據庫中繪製的代碼,以創建一個對象,然後迭代。在以前的版本中,對象中元素的順序在順序上是一致的(儘管我知道這在js中是不能保證的),所以我通過this[0]
,this[1]
等訪問它們。在新版本中(顯然是由於太妃糖臭蟲,https://github.com/typicaljoe/taffydb/issues/109),這種行爲是不可靠的,所以我想知道是否有一個更強大的方式來構造信息和檢索它。一個簡單的例子:如何將結構添加到作爲數據庫查詢結果創建的對象中
var stuffWeCite = TAFFY([{
"first": 1,
"second": 2,
"third": 3,
"fourth": 4
}]);
var filterVar = {"first":1};
var someVar = stuffWeCite()
.filter(filterVar)
.select("first", "second", "third", "fourth");
console.log('someVar: ' + someVar);
以前,結果會出現1,2,3,4,但行爲已經改變。
如果我逐個輸入查詢元素到一個對象中,我會爲它們分配屬性(「first」,「second」等),然後再調用它們,但它們的方式選擇似乎排除了這一點。有沒有一種方法,我可以分配屬性的值從數據庫查詢創建對象時?
我正在運行一個非常小的數據庫(幾百個條目),但是這種方法不會大大增加計算開銷,因爲每個輸出元素都需要對數據庫進行多次調用?對於上下文,我以前曾經調用這個db,然後遍歷結果對象並使用'this'來打印這些值。這樣做,似乎我需要調用數據庫每個查詢160次 - 這是一個顯着的放緩? – larkvi
不是真的,據我所知Taffydb是基於內存的數據庫,所以所有的操作數據庫請求等,發生在內存中,因此速度不應該有太大麻煩,因爲不會有通過電纜或硬盤等待的時間訪問。但無論如何,你仍然可以查詢一次數據庫,獲取記錄集,並迭代記錄集和字段數組。我剛剛在上面加了一個小例子。當然,有一個額外的開銷爲字段添加了另一個迭代,但我認爲它可以忽略,以獲得您想要的結果,這是肯定的事情,並且不會依賴對象鍵中的順序。 –
我強烈建議不要依賴js對象鍵中的順序。它可能會讓你大吃一驚,使用不同的瀏覽器,庫等,並且它們會定期更新,而且由於對象中的關鍵順序並沒有在標準中強制執行,所以它非常不可靠,它們可以在不破壞ecma標準的情況下在下一個版本中打破它。 –