2011-09-29 86 views
2

必須是重複的,但我一直在谷歌上搜索「從對象中的JavaScript值獲取」和「值的JavaScript對象查找」和每一個變種,並得到行不通的,所以道歉,並在這裏不用。從對象中檢索值?

說我有一個JavaScript對象是這樣的:

var options = {"ford": "red", "citroen": "blue"}; 

我怎麼仰望價值blue得到citroen回來?

總是有「寫自己的函數」的路線,我想:

function returnbyValue(options, v): 
    for (var prop in options) { 
     if (options.hasOwnProperty(v)) { 
     if (options[prop] === v) { 
      return prop; 
     } 
     } 
    } 
    return null; 

但它的JavaScript有什麼內在的,或者是有一個更合適的方法來做到這一點?

+0

你可以嘗試array.indexOf( '值');不知道它是否適用於對象 –

+0

不,唉:'未捕獲的類型錯誤:對象#沒有方法'indexOf'' – Richard

回答

1

一個對象的屬性可以被訪問,就像一個關聯數組! 這工作就像一個魅力!

var obj = { 
    'key': 'val' 
}; 

alert(obj['key']); 

或者,如果您希望使用一種方法,您可以創建一個原型方法。

Object.prototype.getPropertyByString = function(str) { 
    return this[str]; 
}; 

alert(obj.getPropertyByString('key')); 

編輯:哇,我剛剛注意到我不能回答你的問題,我的歉意!讓我獲得第二次機會。

沒有內置函數,但低於我的作品的腳本!

var obj = { 
    'key': 'val' 
}; 

Object.prototype.getKeyByValue = function(object) { 
    for(var key in this) { 
     if(this.key === object) { 
      return key; 
     } 
    } 

    return null; 
}; 

alert(obj.getKeyByValue('val')); 

它循環遍歷該對象,並返回與該值匹配的鍵。無論這個值是一個int,string,object還是任何東西,這都是值得的。這是因爲我使用了嚴格平等比較(「===」),它也檢查對象類型是否相同。

而且,請注意檢查,如果該屬性存在是愚蠢的,如果你通過對象的所有鍵循環反正。顯然,當你循環所有的鍵時,它們都存在。

+1

我想使用該值進行檢索,而不是關鍵。 – Richard

+0

是的,我想通了,所以我編輯了我的帖子 –

+0

:)非常感謝 – Richard

2

沒有這樣的內置方法。而你自己的功能對我來說看起來不錯。我無法弄清楚它的任何改進。

+1

'hasOwnProperty'檢查可能/將會是一個改進:) – Andreas

+0

@john_doe,在哪裏?該代碼枚舉所有屬性。在哪裏使用'hasOwnProperty'? – taskinoor

+0

謝謝@john_doe,我添加了一個'hasOwnProperty'檢查。這是爲了檢查繼承的屬性,對吧? – Richard