2013-11-26 25 views
1

我正在使用以下JQuery代碼從本地存儲中獲取數字鍵值。在Firefox中獲取本地存儲值的問題

$.each(localStorage, function(key, val) 
{ 
    if($.isNumeric(key)) 
    { 
     console.log(key + ", " + val); 
    } 
}); 

我必須在本地存儲中添加鍵值「1」,「2」和「3」。但是,上面的循環會在Firefox中按鍵的順序打印值,即「3」,「2」,「1」。如果我在Chrome和IE上運行此腳本,則按預期順序(「1」,「2」,「3」)打印值。

所有瀏覽器都更新到最新版本(FF - 25.0.1,Chrome - 31.0.1650.57,IE - 11)。

有人可以幫助我理解爲什麼FF返回後退順序的值,我該如何防止這種情況?當然,我可以將本地存儲的值分配給某個數組,然後對其進行排序,但是我想避免額外的編碼。

回答

1

將密鑰添加到localStorage時,它們將添加到地圖中。不幸的是,當你迭代它時,不能保證這張地圖會有一個給定的順序。這將取決於瀏覽器的實現,因此Chrome/IE與FF的區別。你能做些什麼來解決你的問題是類似的東西:

var keys = Object.keys(localStorage); 
var sortedKeys = keys.sort(); 
$.each(.sort(), function(key, val) 
{ 
    if($.isNumeric(key)) 
    { 
     console.log(key + ", " + val); 
    } 
}); 

但這不會保留除localStorage的順序映射只會排序詞法順序的關鍵。如果需要,您可以修改上述代碼並添加自定義排序功能。

+0

感謝@Nicolas阿布裏克,它的工作!我只改變「$ .each(.sort(),function(key,val)」爲「$ .each(sortedKeys,function(key,val)」:) – Vardan