477 Stimmen

Wie findet man das erste Element eines Arrays, das einer booleschen Bedingung in JavaScript entspricht?

Ich frage mich, ob es eine bekannte, integrierte/elegante Weise, das erste Element eines JS-Arrays zu finden, die eine bestimmte Bedingung übereinstimmt. Ein C#-Äquivalent würde sein Liste.Finden .

Bisher habe ich eine solche Zweifunktionskombination verwendet:

// Returns the first element of an array that satisfies given predicate
Array.prototype.findFirst = function (predicateCallback) {
    if (typeof predicateCallback !== 'function') {
        return undefined;
    }

    for (var i = 0; i < arr.length; i++) {
        if (i in this && predicateCallback(this[i])) return this[i];
    }

    return undefined;
};

// Check if element is not undefined && not null
isNotNullNorUndefined = function (o) {
    return (typeof (o) !== 'undefined' && o !== null);
};

Und dann kann ich sie benutzen:

var result = someArray.findFirst(isNotNullNorUndefined);

Da es aber auch so viele funktionale Array-Methoden in ECMAScript Vielleicht gibt es ja schon so etwas? Ich kann mir vorstellen, dass viele Leute so etwas ständig implementieren müssen...

10voto

Matt Woelk Punkte 1740

Wenn Sie Folgendes verwenden underscore.js können Sie seine find y indexOf Funktionen, um genau das zu bekommen, was Sie wollen:

var index = _.indexOf(your_array, _.find(your_array, function (d) {
    return d === true;
}));

Dokumentation:

5voto

Kevin Lee Garner Punkte 807

Stand: ES 2015, Array.prototype.find() sorgt für genau diese Funktionalität.

Für Browser, die diese Funktion nicht unterstützen, hat das Mozilla Developer Network eine Polyfill (unten eingefügt):

if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    if (this === null) {
      throw new TypeError('Array.prototype.find called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return value;
      }
    }
    return undefined;
  };
}

5voto

Dotista Punkte 337
foundElement = myArray[myArray.findIndex(element => //condition here)];

4voto

michal.jakubeczy Punkte 6138

Utilice findIndex wie andere zuvor geschrieben haben. Hier ist das vollständige Beispiel:

function find(arr, predicate) {
    foundIndex = arr.findIndex(predicate);
    return foundIndex !== -1 ? arr[foundIndex] : null;
}

Und die Verwendung ist folgende (wir wollen das erste Element im Array finden, das die Eigenschaft id === 1 ).

var firstElement = find(arr, e => e.id === 1);

3voto

Dan Ochiana Punkte 3094

Array.prototype.find() macht genau das, mehr dazu: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

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