2017-09-11 1 views
1

저는 자바 스크립트에 익숙하지 않아 start_value 및 end_value에 의해 정렬 된 배열 (Numbers, timestamps 기본적으로)의 일부 (슬라이스)를 가져와야합니다.정렬 된 배열의 일부분을 시작 값에서 끝 값으로 가져 오기

예를 들어, 지난 달의 임의의 타임 스탬프 배열이 있고 2 주 전과 1 주일 전에 모든 타임 스탬프를 가져 오려고한다고 가정 해 봅시다. 이것은 (바이너리 검색을 사용하여) 작성하는 꽤 간단한 알고리즘이지만이 계산으로 코드를 망칠 필요가 없습니다. 자바 스크립트에서이 작업을 수행하는 방법을 찾고 있었지만 찾지 못했습니다. 향후 도움 :

+0

아직 시도해 봤어? – Vinny

+0

정렬 된 경우'indexOf()'를 사용하여 시작 및 끝 인덱스를 찾은 다음 그 인덱스를 사용하여'slice() '를 호출 할 수 있습니다. 속도를 높이기 위해 반환 된 시작 인덱스를 지난 시점에서 최종 인덱스 검색을 수행 할 수도 있습니다. – skyline3000

+0

@ skyline3000'indexOf'를 사용하면 배열의'start_value'와'end_value'가 정확히 일치한다고 가정합니다. 주어진 날짜의 예에는 '일주일 전'의 정확한 시간에 대한 시간 소인이 없을 수 있습니다. – skirtle

답변

1

는 아마도 filter을 사용하기위한

감사합니다? 더하기 측면에서

var dates = [123, 234, 456, 468, 568, 678]; 
 
var min = 300; 
 
var max = 500; 
 

 
var inRange = dates.filter(function(date) { 
 
    return min < date && date < max; 
 
}); 
 

 
console.log(inRange);

이도를 필요로하지 않는다는 정렬 할 수 있습니다. 아래쪽에서는 관련 시작점과 끝점에 대해 잘 구현 된 이진 검색만큼 빠르지 않을 것입니다. 정말 까다로운 성능 요구 사항이 없다면 중요하지 않다고 생각합니다.

+0

답변 해 주셔서 감사합니다. 배열은 꽤 클 수 있으며 UI 구성 요소이므로 O (log-n)를 통해 O (n)을 수행하는 것은 실제로 옵션이 아닙니다. –

+0

얼마나 큰 소리로 말하는거야? – skirtle

+0

~ 10M (요소), 라이브 리 렌더링 ... –

0

좋아, 내가 찾고있는 바른 js 라이브러리 인 binarysearch를 찾았습니다 : https://www.npmjs.com/package/binarysearch. 존재하지 않는 숫자를 start-end로 받아들이는 rangeValue 함수가 있습니다. 일하고있는 것 같습니다 :)

관련 문제