2016-07-06 2 views
-4

연관 배열이 있는데 글자 "r"로 끝나는 키가 하나있는 경우 배열에서 검색하고 싶습니다. 정적 문자열에 "in"javascript 키워드를 사용하지만 동적으로 정규 표현식을 사용하면 작동하지 않습니다.Javascript - 정규식을 사용하여 특정 배열 키가 있는지 확인하십시오.

+6

코드를 포함시켜 주시겠습니까? –

+1

개체의 모든 속성을 반복하고 각 개체를 테스트해야합니다. – bhspencer

+0

어쨌든 정규 표현식에서 배열을 검색해야하는 이유는 무엇입니까? 정규식은 그렇게 작동하지 않습니다, 당신은 정규식으로 문자열을 평가해야합니다. Regex는 일반 데이터에서 작동하지 않고 문자열에서만 작동합니다. – 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; 
} 

하거나 일치하는 모든 속성 이름하려는 경우 : 수 또한 zzzzBov 기능 솔루션 외에

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

: 더러운 빠른 테스트는 당신이 뭔가를 시도 할 수 충분한 경우

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

을 Array.prototype.some()과 함께 사용하십시오.

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

나는 단지 입에 약간을 던졌다. regex ... JSON 파싱? 그리고 JSON도 시작하지 않습니다! – Biffen

+0

그는 associative array로 obj = {a : 1, b : 2, r : 3}와 같은 일반적인 객체를 가정했습니다. - 문자열에 obj를 파싱하고 문자 "r"로 끝나는 키가 있는지 확인하고 싶다면 regex 테스트를 사용하는 것이 좋습니다. – John

+0

점 옆에는 비효율적입니다. 그래서'JSON.stringify'가 이름과 콜론 사이에 공백을 넣지 않아도되는지의 여부입니다. 그러나 이것은'obj = {a : {r : 0}}'이라면 거짓 긍정을 줄 것입니다. – Biffen

관련 문제