2013-01-08 54 views
2

我有一個對象使用數字鍵訪問非數字鍵對象有效嗎?

data = { 
    'choiceA' : 'Long-Wear', 
    'choiceB' : 'Anti-Age Lifting/Firming', 
    'choiceC' : 'Replenishing/ Moisturizing', 
    'choiceD' : 'Natural/ True-to-Skin', 
    'choiceE' : 'Smoothing/ Illuminating' 
}  

,我需要找回第四值給出一個整數

position = 3; 

通常我會寫

key = $.inArray(position, ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE']); 
answer = data[key]; 

但它是有效的JavaScript訪問用這個數字鍵直接對象?

answer = data[position]; // where position is an integer 

編輯:
一些不好的代碼,我寫的,因爲我使用$ .inArray倒退!
我的意思是寫

arr = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE']; 
key = arr[position]; 
answer = data[key]; 

回答

4

沒有,直到你有數字對象「鍵」,它是無效的,即

data = { 
    '1' : 'Long-Wear', 
    '2' : 'Anti-Age Lifting/Firming', 
    '3' : 'Replenishing/ Moisturizing', 
    '4' : 'Natural/ True-to-Skin', 
    '5' : 'Smoothing/ Illuminating' 
}; 

此外,要注意的是,在JavaScript對象屬性沒有排序。所以你的解決方案是我看到的最好的方式。

+0

我不知道他們沒有排序......今天學到了一些東西。感謝您的回答 – PrimeLens

+0

@PrimeLens不客氣! – VisioN

2

如果你會嘗試它,你會看到它是無效的。更多的是它不工作!

data[position] 

會在你的例子返回undefined ...

+0

你是正確的先生,我沒有嘗試過,發佈這個問題是我的思想遊蕩的虛構。有罪負責,並感謝您的回答 – PrimeLens

2

兩件事情:

  1. 的Javascript鍵總是字符串。如果你傳遞了其他的東西(比如數字),它會被轉換成一個字符串。 (例如,嘗試索引一個數組array["3"],它應該工作

  2. JavaScript對象是訂購!你不能找回第i個鍵值對可移植的。相反,你應該使用數組來存儲的東西(或類似的東西):

    data = [ 
        { name:'choiceA', value: 'Long-Wear'}, 
        { name:'choiceB', value: 'Anti-Age Lifting/Firming'} 
    ]; 
    

    一件事,如果你不能改變的數據表示,雖然重複使用對象for-in循環,再加上一個計數變量。然而,這種做法是不是你可以做的。便攜式,因爲並非所有瀏覽器按照與定義鍵相同的順序進行迭代。

+0

我將答案授予第一張海報,但謝謝你的信息答案。今天學習很多。 – PrimeLens