2010-11-26 8 views
2

나는 체크 --- 자바 스크립트

arr = [1,2,3,4,6,7,8,9] 

이제 배열의 값이 연속 있는지 확인하려면

같은 배열을 가지고있다.

더 구체적이기 때문에, 나는 연속이며, 다음 요소는 다음 너 한테이 연속 번호가 시작된 곳에서 첫 번째 요소를 반환해야합니다 연속되지 않습니다

먼저 확인 제 1 및 제 2 요소를 제공 할

처럼

+4

이 과제인가? 그것은 그것 같이 보인다. 그렇다면 지금까지 시도한 것과 멈춰있는 부분을 보여주십시오. 그렇지 않다면, 당신이 이것을하도록 요구하는 맥락을 설명 할 수 있습니까? –

+0

내가 마지막에 설명했듯이 값을 돌려 줄 알 고를 원한다. – Rohit

+0

@Rohit - 독립 실행 형 번호는 무엇인가? 예를 들어'[1,2,3,4,6,8,9]'는'1, 6, 8' 또는 단지'1, 8'을 반환해야합니까? –

답변

3

한 (!) 참고가 사전에

First Check will give 1 
Second Check will give 6 
and so on... 

도와주세요 감사합니다 각 호출은 그것이 작동하고있는 배열과 그 배열에 있던 이전의 offset을 알고 있어야합니다. 당신이 할 수있는 한 가지는 네이티브 Array 객체를 확장하는 것입니다. [Demo]

Array.prototype.nextCons = (function() { 
    var offset = 0; // remember the last offset 
    return function() { 
    var start = offset, len = this.length; 
    for (var i = start + 1; i < len; i++) { 
     if (this[i] !== this[i-1] + 1) { 
     break; 
     } 
    } 
    offset = i; 
    return this[start]; 
    }; 
})(); 

사용

var arr = [1,2,3,4,6,8,9]; 
arr.nextCons(); // 1 
arr.nextCons(); // 6 
arr.nextCons();​ // 8 
+0

그냥 마지막 인덱스를 가져 와서이 코드를 시작할 장소로 반환하지 않으시겠습니까? –

+0

@Paul - 선택적 매개 변수를 사용하는 것이 좋습니다. – galambalazs

+0

나는 그렇게 생각한다. 귀하의 경우, 나는 그것이 결과가 아닌 요소보다 더 많은 시간이 호출되고 배열의 시작 부분으로 재설정하는 방법이 없다면 배열의 길이보다 더 큰 값을 반환한다고 생각합니다. –

0

의사 코드 :

int count = 0 
for i = 0 to array.length - 2 
    if {array[i + 1] - array[i] = 1 then 
     count+=1 
     return i 
    else count=0} 
4
/** 
* Given an array of number, group algebraic sequences with d=1 
* [1,2,5,4,8,11,14,13,12] => [[1,2],[4,5],[8],[11,12,13,14]] 
*/ 
import {reduce, last} from 'lodash/fp'; 

export const groupSequences = (array) => (
    reduce((result, value, index, collection) => { 
    if (value - collection[index - 1] === 1) { 
     const group = last(result); 
     group.push(value); 
    } else { 
     result.push([value]); 
    } 
    return result; 
    }, [])(array) 
); 
관련 문제