2016-07-06 18 views
-4

我有一個關聯數組,如果有一個以字母「r」結尾的鍵,我想在數組中搜索。 它適用於當我使用「in」javascript關鍵字爲靜態字符串,但不動態,使用正則表達式。Javascript - 使用正則表達式檢查某個數組鍵是否存在

+6

您能否包括您的代碼? –

+1

您將必須遍歷對象中的所有屬性並測試每個屬性。 – bhspencer

+0

究竟應該如何正確地搜索你的數組?正則表達式不起作用,你必須用正則表達式來評估字符串。正則表達式不適用於一般數據,僅適用於字符串。 – somethinghere

回答

0

Object.keys(obj)以數組形式獲取對象的鍵。因爲它是一個數組,你就可以使用Array.prototype.filter選擇您感興趣的鍵:

keysEndingWithR = 
    Object 
    .keys(obj) 
    .filter(function (key) { 
     return /r$/.test(key); 
    }); 
0

遍歷對象的屬性和如果你的表達式匹配每一個測試。如果它返回屬性名稱。

function getMatchingPropertyName(expression, object) 
    for (var property in object) { 
     if (object.hasOwnProperty(property)) { 
      if (expression.test(property)) { 
       return property 
      } 
     } 
    } 
    return null; 
} 

,或者如果你想所有匹配的屬性名稱:

function getMatchingPropertyNames(expression, object) 
    var result = []; 
    for (var property in object) { 
     if (object.hasOwnProperty(property)) { 
      if (expression.test(property)) { 
       result.push(property); 
      } 
     } 
    } 
    return result; 
} 
-1

如果髒了簡單的測試就足夠了,你可以嘗試像:

/r":/.test(JSON.stringify(obj)); 

除此之外zzzzBov功能的解決方案還可以與Array.prototype.some()配合使用

Object.keys(obj).some(function (key) { 
    return /r$/.test(key); 
}); 
+0

我剛剛在我的嘴裏吐了一下。用正則表達式解析JSON ...?開始的時候甚至不是JSON! – Biffen

+0

他說關聯數組,所以我假設一個正常的對象,如obj = {a:1,b:2,r:3}; - 如果只是想檢查是否有一個以字母「r」結尾的密鑰,那麼將這樣的obj解析爲字符串並對其使用正則表達式測試有什麼問題? – John

+0

效率低下就是重點。那麼是否需要使用'JSON.stringify'來在名稱和冒號之間不加空格。但是如果'obj = {a:{r:0}}',這會產生誤判。 – Biffen