2011-06-03 48 views
0
var regxp = /[\S]/; //any char, not sure if it's /.*/ or something else 
var obj = { 
atr1: "bla" 
} 
var blahs = obj[regxp]; //returns atr1 

我正在尋找一個快捷方式從對象中獲取方法/屬性名稱,因爲for..in比for循環慢。 我想要這個特殊情況下,當我知道該對象將只有一個方法/屬性我可以爲對象的方法/屬性選擇器設置正則表達式嗎?

+0

'VAR OBJ = { ATR1 = 「喇嘛」 }'那是什麼? – wong2 2011-06-03 05:22:25

+0

var obj = {atr1:「bla」}是正確的方法,但我沒有真正解決這個問題 – Ibu 2011-06-03 05:23:40

+1

那麼正則表達式的目的是什麼 – Ibu 2011-06-03 05:24:26

回答

2

,你可以嘗試使用正則表達式,但沒有訪問對象的屬性,它不會做你想要的:它會在正則表達式轉換爲字符串,並使用該屬性的名稱。

通過匹配正則表達式在對象上查找屬性名稱的唯一方法是for ... in循環,就像您提到的那樣。如果對象只有一個屬性,則性能不應該成爲問題。

function findPropertyNameByRegex(o, r) { 
    for (var key in o) { 
    if (key.match(r)) { 
     return key; 
    } 
    } 
    return undefined; 
}; 
findPropertyNameByRegex(obj, regxp); // => 'atr1' 
+0

是的,我很害怕這是這種情況..謝謝你,並且很抱歉每個人都想出這樣的虛擬問題! – tenshou 2011-06-03 14:25:08

0

您的正則表達式將匹配單個非空格字符。

for...in一個循環。它比什麼慢?你有基準嗎?

如果你想查看使用正則表達式的屬性,你必須在一個循環中做到這一點。

for(var k in obj) { 
    if(regexp.match(k)) { 
     // do whatever 
    } 
} 
+0

「與for循環比較」。我很好奇,是否有一種方法可以將對象的屬性名稱與正則表達式匹配,所以我不必使用for for循環。 – tenshou 2011-06-03 14:20:53

+0

是的,我已經基準測試過,它比普通的for(i; i tenshou 2011-06-03 14:29:54

0

如果你只有一個屬性,你可以肯定地說for..in不會太慢。

相關問題