2011-02-23 3 views
1

나는 영어 구문의 배열을 반복하고, 현재 텍스트 노드와 일치하는 항목을 찾으면이를 non_english 배열로 바꿉니다. 이 모든 것은 정확한 일치를 위해 100 % 작동합니다.부분 일치를 찾기 위해 배열을 반복하는 것을 어떻게 피합니까?

부분 일치의 경우 부분 일치를 허용하는 .match 명령을 사용해야합니다.

정확히 일치하는 검색하려면 코드를

는 다음과 같이이다 :

var에 = $ .inArray (값, en_lang) 발견;

그런 다음 발견 된 값이 있으면 텍스트 대체를 수행하십시오. 이 방법은 빠르며 좋아합니다.

그러나 부분적인 단어/구문 검색을 수행하려면이 루핑 코드를 사용해야합니다.

// loop thru language arrays 
for (var x = en_count; x > 0; x--) { 

// assign current from/to variables for replace 
var from = en_lang[x]; 
var to = other_lang[x]; 

// if value match do translation 
if (value.match(from)) { 
    content(node, value.replace(from, to)); 
} 

// mark this node as translated 
if ($.browser.msie == 'false') { 
    $(node).data('translated', 'yes'); 
} 

}

이는 일을하지만, 꽤 느립니다. 많은 연구 끝에 join 명령을 통해 영어 배열을 목록 기반 문자열로 변환 할 수 있다는 것을 알게되었습니다.

그러나이 목록에서 부분 일치를 검색하고 목록에서 해당 위치를 반환하는 기능을 찾을 수 없습니다.

나는 2006 년에 만들어진이 오래된 js 함수를 시험해 보았습니다. 그러나 위치를 올바르게 가져 오는 방법을 알 수는 없습니다.

function listfind(list, value, delimiters) { 

    if (!delimiters) { 
     var delimiters = ',' 
    } 

    _TempListSplitArray = list.split(delimiters) 

    var FoundIdx = 0; 

    for (i = 0; i < _TempListSplitArray.length; i++) { 
     if (_TempListSplitArray[i] == value) { 
      FoundIdx = i + 1; 
      break 
     } 
     if (value.match(_TempListSplitArray[i])) { 
      FoundIdx = i + 1; 
      break 
     } 
    } 
    return FoundIdx 
} 

감사합니다.

+0

' : contains' jquery 부분 검색을 처리합니다. http://api.jquery.com/contains-selector/ 내가 생각할 수있는 유일한 점은 비 요소와 잘 작동하지 않을 수 있다는 것입니다. 그래서 이것에 대해 생각해 볼 수 있습니다. http://stackoverflow.com/questions/1789945/javascript-string-contains 도움이 되었으면 좋겠다. – Val

+0

하지만 이것은 선택자를위한 것이므로 필요한 요소가 이미 있으므로 현재 텍스트 노드 내부의 부분 일치를 검색해야한다. – crosenblum

+0

배열을 모두 함께 나누기/반복을 건너 뛰지 않고 큰 문자열에서 정규식으로 찾기 만하면됩니다. – epascarello

답변

0

자바 스크립트는 시스템의 foreach는 유형이 있지만 여전히 루프 당신의 배열 불구하고 루핑을 위해 점점하지만,이 방법은 allso가 업데이트] 객체

var obj = {'one':'hello', 'two':'world']; 
for(var key in obj){ 
    alert("key: "+key+" value: "+obj[key]); 
} 

와 함께 작동 최고의 그게

var array = ['hello', 'world']; 
for(var key in array){ 
    alert(array[key]); 
} 

에 따라 질문에 대한 의견이 있습니다 당신이 알고있는 텍스트를 바꿀 수 있습니다

var str = "hello World"; 
str = str.replace("hello", "Bye bye"); 
alert(str); 
+0

하지만 내 목표는 루프를 피하는 것입니다. 특히이 경우에는 성능이 많이 떨어집니다. – crosenblum

+0

죄송합니다. 유일한 다른 방법은 배열의 순서를 알고 그것을 사용할 필요없이 액세스를 사용하는 것입니다. – Barkermn01

+0

배열의 순서 ... – crosenblum

관련 문제