2017-02-08 1 views
-3

Wie gebe ich den Index der ersten Änderung (Index 2 in diesem Fall, wo es von 0 zu 1 geändert wurde) gegeben Array [0, 0, 1, 1, 1].Return-Index der ersten Array-Änderung

Ein anderes Beispiel, [1, 1, 1, 1, 1, 2, 2] sollte 5 zurückgeben.

+0

Schleife durch, vergleichen Elemente verwenden könnte, Index der Elemente, die nicht gleich sind. – Craicerjack

+0

Sie könnten eine for-Schleife und Variable verwenden, die das erste Element enthält, und dann prüfen, ob das aktuelle Element sich von dem ersten unterscheidet. – Feirell

+2

Es gibt viele Möglichkeiten, dies zu tun. Bitte zeigen Sie, was Sie versucht haben. Dies ist kein Dienst zum Schreiben von freiem Code – charlietfl

Antwort

4

Verwendung findIndex:

var a = [1, 1, 1, 1, 1, 2, 2]; 
 

 
var b = a.findIndex(v => a[0] !== v); 
 

 
console.log(b);

Beachten Sie, dass Find nicht von IE unterstützt wird, aber Sie können die polyfill bei der Dokumentation Seite I verknüpft gefunden verwenden.

+1

. Das erste Beispiel verwendet zwei Scans des Arrays, wenn nur eines benötigt wird. – Alnitak

+0

Änderte die Antwort @ Alnitak, ich hatte zuerst die Illusion, dass 'finden' wird von mehr Browser-Versionen als' findIndex' unterstützt, aber beide werden von den gleichen Versionen unterstützt ... – baao

+0

Gut - das erste Beispiel war ziemlich arm, IMHO. Es wurde nicht nur zweimal gescannt, sondern in einem generischen Anwendungsfall hätte es ein seltsames Verhalten gehabt, wenn einer der Werte "undefiniert" war. – Alnitak

-1

Sie Array#some für ES5

function getChangeIndex(array) { 
 
    var index = -1; 
 
    array.some(function (a, i, aa) { 
 
     if (a !== aa[0]) { 
 
      index = i; 
 
      return true; 
 
     } 
 
    }); 
 
    return index; 
 
} 
 

 
console.log(getChangeIndex([0, 0, 1, 1, 1]));  // 2 
 
console.log(getChangeIndex([1, 1, 1, 1, 1, 2, 2])); // 5 
 
console.log(getChangeIndex([1, 1, 1, 1]));   // -1 (no change)

+1

Sie sollten "index" auf "-1" initialisieren, falls nichts gefunden wird! –

+0

@ibrahimmahrir, rechts, bleibt es im 'indexOf' Ergebnisschema. –

+0

@dv, um zu erwähnen, warum? –

-2

Ich hoffe, dies lösen

var givenArray = [1,1,1,1,1,2,2]; 

    function result(arr) { 
     var PreValue = undefined; 
     for(var i in arr){ 
      if(PreValue != undefined && PreValue != arr[i]) { 
       return i; 
      } 
      PreValue = arr[i]; 
     } 
    } 

    console.log(result(givenArray)); 
Verwandte Themen