2010-11-26 11 views
2

Ich habe ein Array alsüberprüfen, ob Elemente in Array sind in Folge --- Javascript

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

Jetzt möchte ich, wenn die Werte im Array überprüfen, aufeinanderfolgend sind.

Sein präziser, möchte ich diesen

Erster Check gibt erstes und zweites Element ist in Folge und das nächste Element ist nicht aufeinander folgt dann der algo muss das erste Element zurückkehren, von wo aus der laufenden Nummer gestartet

Wie

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

Bitte helfen Vielen Dank im Voraus

+4

Ist dies eine Aufgabe? Es sieht so aus. Wenn ja, zeig was du bisher versucht hast und wo du feststeckst. Wenn nicht, könnten Sie den Kontext erklären, in dem Sie dies tun müssen? –

+0

Ich möchte einen Algo, der mir die Werte zurückgibt, wie ich am Ende beschrieben – Rohit

+0

@Rohit - Was ist mit einer Standalone-Nummer? zum Beispiel sollte "[1,2,3,4,6,8,9]' '' 1, 6, 8' oder nur '1, 8' zurückgeben? –

Antwort

3

Eine Bemerkung am Rande ist dass Sie es mehrmals aufrufen möchten, damit jeder Aufruf wissen sollte, an welchem ​​Array er arbeitet und was der vorherige offset in diesem Array war. Eine Sache, die Sie tun können, ist das native Array Objekt zu erweitern. [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]; 
    }; 
})(); 

Nutzungs

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

Warum geben Sie nicht einfach den letzten Index zurück, der als Startort für diesen zurückgegeben wurde? –

+0

@Paul - Es kann eine gute Idee für einen optionalen Parameter sein. – galambalazs

+0

Ich nehme es an. In Ihrem Fall, ich denke, es gibt steigende Werte größer als die Länge des Arrays, wenn sie öfter aufgerufen als es nicht fortlaufende Elemente gibt, und es gibt keine Möglichkeit, es auf den Anfang des Arrays zurückgesetzt ... –

0

Pseudocode:

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) 
); 
Verwandte Themen