Arrays - fehlende zahlen in einer Sequenz
Ich versuche zu finden, eine einfache Möglichkeit, um eine Schleife (Iteration), um über ein array zu finden, all die fehlenden zahlen in einer Sequenz, so wird das array sieht ein wenig wie die unten.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
Für das array oben, die ich brauchen würde 0189462
und 0189464
abgemeldet.
UPDATE : das ist genau die Lösung, die ich verwendet von Soufiane Antwort.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
var mia= [];
for(var i = 1; i < numArray.length; i++)
{
if(numArray[i] - numArray[i-1] != 1)
{
var x = numArray[i] - numArray[i-1];
var j = 1;
while (j<x)
{
mia.push(numArray[i-1]+j);
j++;
}
}
}
alert(mia) //returns [0189462, 0189464]
UPDATE
Hier ist ein genauerer version verwenden .reduzieren
JS:
var numArray = [0189459, 0189460, 0189461, 0189463, 0189466];
var mia = numArray.reduce(function(acc, cur, ind, arr) {
var diff = cur - arr[ind-1];
if (diff > 1) {
var i = 1;
while (i < diff) {
acc.push(arr[ind-1]+i);
i++;
}
}
return acc;
}, []);
console.log(mia);
- Sie iterieren über das array und vergleichen jeweils zwei Elemente.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wissen, dass die zahlen sortiert sind und immer
numArray[i]
undnumArray[i-1]
, wenn die Differenz größer ist als1
ist nicht im array.Uhr Ihre führenden Nullen, Sie werden gelöscht, wenn das array interpretiert wird
var Ein= [0189459, 0189460, 0189461, 0189463, 0189465]
(Eine gibt [189459,189460,189461,189463,189465])
var Ein= [0189459, 0189460, 0189461, 0189463, 0189465];
alert(abwesend(A))
/* Rückgabewert: (Array)
189462,189464
*/
Finden Sie eine fehlende Zahl in einer Reihe, Erste von allen, müssen Wir ein array Sortieren. Dann können wir ermitteln, welche Zahl fehlt. Ich liefere hier vollständigen code, mit einigen test-Szenarien. dieser code ermittelt nur fehlende positive Zahl ein, wenn Sie negative Werte, auch dann gibt es positive Zahl.
JS:
Wäre es relativ einfach zu Sortieren array:
Dann, je nach dem, was war am einfachsten für Sie:
Ich eine rekursive Funktion für diese.
Nicht die beste Idee, wenn Sie auf der Suche über eine große Reihe von zahlen. FAIRE WARNUNG: rekursive Funktionen, die ressourcenintensiv sind (Zeiger und Zeug), und dies hat Sie vielleicht unerwartete Ergebnisse, wenn Sie sind, arbeiten mit großen zahlen. Sehen Sie die jsfiddle. Diese übernimmt auch Sie haben das array sortiert.
Im Grunde, Sie passieren die "findMissing ()" - Funktion das array, das Sie verwenden möchten, die startnummer und stoppen Nummer und lass es gehen von dort aus.
Also:
Bitte prüfen Sie unter code.....
ES6-Stil
Ergebnis: [189462, 189464]
Hier ist eine Variante von @Mark Walters ist Funktion die zusätzlich die Möglichkeit anzugeben, eine untere Grenze für die Sequenz, zum Beispiel, wenn Sie wissen, dass Ihre Sequenz sollte beginnen immer bei
0189455
oder irgendeine andere Zahl wie1
.Sollte es auch möglich sein, ist eine Anpassung dieser code zu prüfen, eine Obere Grenze, aber im moment kann er nur einen Blick für die unteren Grenzen.
JS:
HTML:
JS: