webentwicklung-frage-antwort-db.com.de

verwenden Sie lodash, um eine Teilzeichenfolge aus einem String-Array zu finden

Ich lerne lodash. Kann man mit lodash einen Teilstring in einem String-Array finden?

    var myArray = [
    'I like oranges and apples',
    'I hate banana and grapes',
    'I find mango ok',
    'another array item about fruit'
    ]

kann ich überprüfen, ob sich das Wort "Orangen" in meinem Array befindet? Ich habe _.includes, _.some, _.indexOf ausprobiert, aber alle sind fehlgeschlagen, da sie den vollständigen String und keine Unterzeichenfolge betrachten

6

Sie können leicht einen Iteratee für some () erstellen, indem Sie die höheren Funktionen von lodash verwenden. Zum Beispiel:

_.some(myArray, _.unary(_.partialRight(_.includes, 'orange')));

Die Funktion unary () stellt sicher, dass nur ein Argument an den Rückruf übergeben wird. Die Funktion partialRight () wird verwendet, um den 'orange'-Wert als zweites Argument auf include () anzuwenden. Das erste Argument wird bei jeder Iteration von some() bereitgestellt.

Dieser Ansatz funktioniert jedoch nicht, wenn es auf Groß- und Kleinschreibung ankommt. Beispielsweise gibt 'Orange' den Wert false zurück. So können Sie mit der Groß- und Kleinschreibung umgehen:

_.some(myArray, _.method('match', /Orange/i));

Die Funktion method () erstellt eine Funktion, die die angegebene Methode des ersten übergebenen Arguments aufruft. Hier stimmen wir mit einem regulären Ausdruck ohne Berücksichtigung der Groß- und Kleinschreibung überein.

Wenn die Groß- und Kleinschreibung keine Rolle spielt und Sie einfach den method()-Ansatz bevorzugen, funktioniert dies auch für ES2015:

_.some(myArray, _.method('includes', 'orange'));
13
Adam Boduch

Zwei schnelle Möglichkeiten - keine Verwendung von lodash (sorry)

var found = myArray.filter(function(el){
  return el.indexOf('oranges') > -1;
}).length;

if (found) { // oranges was found }

oder wie ich in dem Kommentar erwähnte:

var found = myArray.join(',').indexOf('oranges') > -1;
if (found) { // oranges was found }
4
James

Sie können dies mit lodash tun, aber es ist auch sehr praktisch, wenn Sie native Javascript-Methoden verwenden:

function stringArrayContains(array, str) {
  function contains(el) {
    return (el.indexOf(str) !== -1) ? true : false;
  }

  return array.some(contains);
}

Testen der obigen Funktion:

var a = ['hello', 'there'];
var b = ['see', 'ya', 'later'];

stringArrayContains(a, 'ell') // true
stringArrayContains(a, 'what') // false
stringArrayContains(b, 'later') // true
stringArrayContains(b, 'hello') // false

Array.prototype.some wendet eine von Ihnen definierte Funktion auf jedes Element eines Arrays an. Diese Funktion (in unserem Fall enthält) muss true oder false zurückgeben. Wenn bei einem Durchlauf durch die Array-Elemente true zurückgegeben wird, gibt die some -Methode true zurück.

Ich persönlich denke im Allgemeinen, dass, wenn Sie native JS-Methoden für einfache Funktionen verwenden können, es besser ist, eine Bibliothek zu laden, um nur dasselbe zu tun. Lodash bietet absolut Leistungsvorteile, die jedoch nicht unbedingt realisiert werden, es sei denn, Sie verarbeiten große Datenmengen. Nur meine zwei Cent.

Prost!

0
Isaiah Lee

Am besten definieren Sie eine Funktion, um die Aufnahme eines Teilstrings zu überprüfen.

var contains = _.curry(function (substring, source) {
    return source.indexOf(substring) !== -1;
});

Ich verwende _.curry hier, um eine aktuelle Funktion zu erhalten, die dann teilweise angewendet werden kann.

_.some(myArray, contains('item'));

Sie können auch eine Teilzeichenfolge in einer verbundenen Zeichenfolge finden.

contains('item', _.join(myArray))

UPD:

Ich habe nicht bemerkt, dass lodash bereits eine Funktion hat, um den Wert einer Sammlung zu ermitteln.

Die Funktion _.includes ist ziemlich identisch mit dem, was ich oben definiert habe. Es verwendet jedoch wie alles in lodash die unterschiedliche Reihenfolge der Argumente. In meinem Beispiel habe ich eine Quelle als jüngstes Argument für eine curried-Funktion angegeben, die meine Funktion für die punktlose Programmierung von Stil nützlich macht, wenn lodash auf die Quelle als erstes Argument derselben Funktion wartet.

Sehen Sie sich die Vorträge von Brian Lonsdorf an https://www.youtube.com/watch?v=m3svKOdZijA

Nutzen Sie auch die Gelegenheit, in ramda zu suchen. Diese Bibliothek bietet eine bessere Möglichkeit für die praktische Funktionsprogrammierung in JavaScript.

0

Ich fand diesen Frage/Antwort-Thread, als ich versuchte herauszufinden, wie ein Teilstring mit jedem String in einem Array abgeglichen werden kann und REMOVE ein Arrayelement mit diesem Teilstring entfernt.

Während die obigen Antworten mich auf den richtigen Weg bringen, und obwohl dies die ursprüngliche Frage nicht speziell beantwortet, erscheint dieser Thread zuerst in der Google-Suche, wenn Sie versuchen, herauszufinden, wie das obige Entfernen eines Array-Elements durchgeführt werden kann Ich würde hier eine Antwort posten.

Am Ende fand ich einen Weg, um mit der _.remove-Funktion von Lodash übereinstimmende Array-Zeichenfolgen wie folgt zu entfernen:

        // The String (SubString) we want to match against array (for dropping purposes)
        var searchSubString = "whatever" 

        // Remove all array items that contain the text "whatever"
        _.remove(my_array, function(searchSubString) {
              return n.indexOf(searchSubString) !== -1;
            });

Im Wesentlichen stimmt indexOf mit der Position des Teilstrings innerhalb des Strings überein. Wenn der Teilstring nicht gefunden wird, wird -1 zurückgegeben, wenn indexOf eine andere Zahl als -1 zurückgibt (die Anzahl ist die SubString-Position in Anzahl der Zeichen in der Array-Zeichenfolge.) ). 

Lodash entfernt das Array-Element über die Array-Mutation. Auf das neu geänderte Array kann über denselben Namen zugegriffen werden.

0
Necevil