2010-11-26 33 views
2

私はチェックされた配列の要素が連続している場合--- javascriptの

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

として配列を持っている今、私は、配列の値が連続しているかどうかを確認します。

より具体的なので、私はこの

最初のチェックは、第1および第2の要素を与えたいが連続していると、次の要素が連続していないで、その後ALGOは、連続した番号が同様

を始めた場所から最初の要素を返す必要があります

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

+4

これは割り当てですか?それはそれのようです。もしそうなら、あなたが今までに試したこととあなたが立ち往生した場所を示してください。そうでない場合は、これを行う必要がある状況を説明することができますか? –

+0

私は最後に説明したように私に値を返す孤独が欲しいです – Rohit

+0

@Rohit - スタンドアロン番号はどうですか? '[1,2,3,4,6,8,9]'は '1、6、8'、あるいは' 1,8 'だけを返しますか? –

答えて

3

一つの追記がある事前に 感謝を助けてくださいそれを複数回呼びたいと思っているので、各呼び出しがどの配列で作業しているか、その配列内の以前のoffsetの内容を知る必要があります。あなたができることの1つは、ネイティブの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) 
); 
関連する問題