1407 Stimmen

Bestimmen, ob ein Array einen Wert enthält

Ich muss feststellen, ob ein Wert in einem Array vorhanden ist.

Ich verwende die folgende Funktion:

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] == obj) {
            return true;
        }
    }
    return false;
}

Die obige Funktion gibt immer false zurück.

Die Array-Werte und der Funktionsaufruf lauten wie folgt:

arrValues = ["Sam","Great", "Sample", "High"]
alert(arrValues.contains("Sam"));

10 Stimmen

Der Code funktioniert in Safari 4.0.2. Übrigens: Ich würde eine === Vergleich anstelle von nur == .

1 Stimmen

"Die obige Funktion gibt immer false zurück." Nein, das tut sie nicht: Die Funktion funktioniert wie erwartet - der Fehler muss woanders liegen.

2 Stimmen

1voto

John Slegers Punkte 41127

Die einfachste Lösung für eine contains Funktion, wäre eine Funktion, die wie folgt aussieht:

var contains = function (haystack, needle) {
    return !!~haystack.indexOf(needle);
}

Idealerweise sollten Sie diese Funktion jedoch nicht als eigenständige Funktion, sondern als Teil einer Hilfsbibliothek verwenden:

var helper = {};

helper.array = {
    contains : function (haystack, needle) {
        return !!~haystack.indexOf(needle);
    }, 
    ...
};

Wenn Sie zu den Unglücklichen gehören, die den IE<9 noch unterstützen müssen und sich daher nicht auf indexOf können Sie Folgendes verwenden Polyfill die ich erhalten habe. aus dem MDN :

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {
    var k;
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }
    var o = Object(this);
    var len = o.length >>> 0;
    if (len === 0) {
      return -1;
    }
    var n = +fromIndex || 0;

    if (Math.abs(n) === Infinity) {
      n = 0;
    }
    if (n >= len) {
      return -1;
    }
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    while (k < len) {
      if (k in o && o[k] === searchElement) {
        return k;
      }
      k++;
    }
    return -1;
  };
}

-7voto

valeri Punkte 13

Ich bevorzuge die Einfachheit:

var days = [1, 2, 3, 4, 5];
if ( 2 in days ) {console.log('weekday');}

9 Stimmen

Er will einen Wert in einem Array finden, nicht einen Index. Damit ist die Aufgabe also nicht zu bewältigen, auch wenn sie einfach ist. developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X