2008-10-07 39 views
35

我需要從JavaScript中的一個相當大的關聯數組中獲取第一個項目(實際上,只是第一個鍵)。以下是我正在做它目前(使用jQuery):從JavaScript中的關聯數組中獲取第一項的最有效方法是什麼?

getKey = function (data) { 
    var firstKey; 
    $.each(data, function (key, val) { 
     firstKey = key; 
     return false; 
    }); 
    return firstKey; 
}; 

只是猜測,但我要說我們有了一個更好的:這樣做的(閱讀更有效)的方式。有什麼建議麼?

更新:感謝您的洞察力的答案和意見!我忘記了我的JavaScript 101,其中規範說你不能保證在關聯數組中有特定的順序。不過,有趣的是,大多數瀏覽器都是這樣實現的。我不希望在獲得第一個鍵之前對數組進行排序,但根據我的用例,這可能是不可避免的。

+0

如果它是一個關聯數組,那麼如何知道第一個項是什麼? – 2008-10-07 03:50:59

+0

我認爲他意味着插入到數組中的第一項。 – 2008-10-07 03:56:04

+0

如果你想這樣做,你需要構建你自己的堆棧實現。 Assoc數組不保留任何鍵的順序。 – 2008-10-07 04:01:15

回答

41

首先沒有last元素在關聯數組(即對象)中。您希望獲得的唯一順序是元素被解析器保存的順序 - 並且不保證與此保持一致。

但是,如果你想第一拿出,經典的方式實際上可能更容易一點:

function getKey(data) { 
    for (var prop in data) 
    return prop; 
} 

想避免繼承屬性?

function getKey(data) { 
    for (var prop in data) 
    if (data.propertyIsEnumerable(prop)) 
     return prop; 
} 
2

除了喬納森的解決方案,我們還可以擴展默認的陣列功能:

Array.prototype.getKey = function() { 
    for (var prop in this) 
    if (this.propertyIsEnumerable(prop)) 
     return prop; 
} 
41

你可以避免通過參考第一項創建一個函數從Object.keys()返回:

var firstKey = Object.keys(data)[0]; 

對於排序後的密鑰列表中的第一個條目,只需添加對.sort()方法的調用:

var firstKey = Object.keys(data).sort()[0]; 
相關問題