2016-06-14 3 views
0

S3에 저장된 일부 XML 파일로 작업하고 있습니다. 노드에서 xml2js 모듈을 사용하여 xml을 구문 분석 한 다음 .jpg가있는 문자열을 추출합니다. 필터 메서드를 사용하고 내 자신의 for 루프를 사용하여 시도했지만 그 시간을 면도하지 않았다. 코드의이 섹션을 작성하는 더 빠른 방법이 있습니까? 아니면이를 수행하는 가장 빠른 방법입니까? 어떤 도움을 주셔서 감사합니다.JavaScript에서 문자열 배열을 필터링하는 가장 빠른 방법

이용한 필터있어서

//this took 52393ms 
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 
var images = arrayOfStrings.filter(function(str) { 
    return str.indexOf('.jpg') !== -1; 
}); 
resolve(images); 

루프 사용 : I는 (' "') file.split 사용한 후에

//this took 52681ms 
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 
var images =[]; 
for(let i = 0; i < arrayOfStrings.length; i++) { 
    if(arrayOfStrings[i].indexOf('.jpg') !== -1) { 
     images.push(arrayOfStrings[i]); 
    } 
} 
resolve(images); 

데이터는 다음과 같다;

[ '{','rstuv',':{','options',':[{','![alt](CKrgUgiYMflaWnsGZ009.jpg)']]; 
+1

'let' 대신'var'을 사용하여'for'를 시도해야합니다. let은 모든 반복마다 새로운 변수를 생성합니다. – Rajesh

+4

초기 데이터의 예를 제공해주십시오. – Foker

+2

프로파일 러를 사용하여 시간이 소비 된 정확한 위치를 확인하십시오. 실제 범인 인 JSON 직렬화 일 수 있습니다 – alex

답변

5
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 

하지 마십시오. 데이터를 검색하려면 구조화 된 상태로 유지하십시오. 문자열을 문자열로 묶은 다음 검색하면 실수 (문자열에 인용 부호가 포함되어있을 때), 적절한 문자열이 아닌 많은 배열 요소를 가져올뿐만 아니라 원본 XML 파일을 텍스트로 읽는 것보다 개선되지 않습니다 직접 검색하는 것입니다.

대신 data 개체 (자세한 내용은 Access/process (nested) objects, arrays or JSON 참조)를 반복하거나 필요한 경우 재귀를 수행하고 예상되는 위치에서 문자열 (및 속성 이름?)을 필터링하십시오. 이것은 훨씬 더 빠를 것입니다.

+0

좋아, 그걸 들여다 보겠습니다. Bergi – nasoj1100

+0

S3에서 XML을 얻는 것이 많은 시간을 차지하는 것 같습니다. 그러나 나는 7-8 초를 면도했다. 당신의 도움을 주셔서 감사합니다. – nasoj1100

관련 문제