2014-03-06 5 views
0

저는 _.findWhere를 사용하여 백 슬래시가 포함 된 노드를 찾습니다 (api에서 '하위 폴더'를 나타냄). 그러나 하나의 백 슬래시를 검색하는 데 문제가 있습니다.이 언어가 쉽게 불가능한 것 중 하나인지 확실하지 않습니다. 내 함수 호출은 현재 다음과 같습니다밑줄 _.find 백 슬래시가 포함되어 있습니다.

 for(var i in data){ 
      if(
       _.findWhere(data, {name:'\\'}) 
      ) { 
       console.log(data[i]); 
       console.log('this'); 
      }; 
     } 

및 데이터의 예 :

[ 
    { 
     "name": "QA", 
     "matchedElements": [ 
      { 
       "id": 285, 
       "name": " exch2010" 
      }, 
      { 
       "id": 288, 
       "name": "ad01" 
      }, 
      { 
       "id": 289, 
       "name": "exchange01" 
      }, 
      { 
       "id": 290, 
       "name": "ad02" 
      } 
     ] 
    }, 
    { 
     "name": "QA\\Stuff", 
     "matchedElements": [ 
      { 
       "id": 240, 
       "name": "build-vmstudio-26" 
      }, 
      { 
       "id": 241, 
       "name": "build-seleniumw" 
      }, 
      { 
       "id": 242, 
       "name": "build-linux-02" 
      }, 
      { 
       "id": 250, 
       "name": "build-rh5-x64" 
      }, 
      { 
       "id": 251, 
       "name": "build-rh5-x86" 
      }, 
      { 
       "id": 563, 
       "name": "build-linux-01" 
      } 
     ] 
    }, 
    { 
     "name": "PROD", 
     "matchedElements": [ 
      { 
       "id": 7, 
       "name": "css-ora11sql2k8.uptimesoftware.com" 
      }, 
      { 
       "id": 8, 
       "name": "css-sql2005.uptimesoftware.com" 
      } 
     ] 
    } 
] 

는 결국 스크립트가 이중 백 슬래시와 노드를 취할 것을의 노드와 일치 동일한 이름을 하위 노드로 배치하여 중첩 된 객체를 만듭니다.

+0

저는 밑줄을 사용하지 않지만, 정확히 일치한다고 제안합니다. 또한, 왜 반복적으로 동일한 검색을 반복하는지 알지 못합니다. –

+0

@cookiemonster 감사합니다. 스크립트에 대한 의견을 보내 주시면 감사하겠습니다. – flashpunk

답변

2

findWhere은 정확한 일치를 찾고 있지만 데이터에는 백 슬래시로만 이름이 지정되지 않습니다. 대신 find을 사용하여 해당 이름의 첫 번째 요소를 가져옵니다. 그러나 실제로 찾고있는 기능은 _.some입니다 : 또한

for (var i=0; i<data.length; i++){ 
    if(_.some(data[i].matchedElements, function(element) { 
      return /\\/.test(element.name); 
    })) { 
     console.log(data[i]); 
    } 
} 

, do not use for in loops on arrays!


사실 루프는 전혀 필요하지 않습니다. 당신은 누구의 .name 백 슬래시를 포함 data에서 이러한 요소를 찾기 위해 밑줄하려면, 단지

var elements = _.filter(data, function(element) { 
    return /\\/.test(element.name); 
}); 
_.each(elements, function(el) { 
    console.log(el); 
}); 

또는 그에 상당하는 - 완전히 밑줄없이 - 당신이 이미 가지고 루프 구조 :

for (var i=0; i<data.length; i++){ 
    if(/\\/.test(data[i].name)) { 
     console.log(data[i]); 
    } 
} 

대신 /\\/.test(x)x.indexOf("\\")!=-1을 사용할 수도 있습니다.

+0

"QA \\ Stuff"노드에는 이중 백 슬래시가 있습니다. 이 루프가 작동하도록 노력하고있어,하지만 그것은 아무것도 반환하지 않는 것, 왜 그것이 matchedElements에 액세스해야하는지 모르겠다. – flashpunk

+0

그건 하나의,하지만 이스케이프 백 슬래시 ... 정확하게 "반환"에 의해 작동하지 않습니다 "로그"를 의미합니까? – Bergi

+0

예, 사과합니다. 아무 것도 기록하지 않습니다. – flashpunk

관련 문제