2016-08-08 13 views
1

Gibt es eine lodash-Funktion, die ein Array von Nadeln aufnimmt und mindestens eine Übereinstimmung nach einem String (Heuhaufen) sucht? Zum Beispiel:Lodash: Suche nach einem String für mindestens 1 Wert in einem Array

let needles = ['one', 'two', 'three'] 
let str = 'one in every thousand will quit their jobs' 

Ich brauche str zu suchen, um zu sehen, ob es zumindest eine der needles enthält. Ich kann dies ohne lodash implementieren, aber wenn es eine Funktion gibt, die helfen wird, würde ich das Rad lieber nicht neu erfinden, da ich bereits lodash in mein Projekt geladen habe.

Antwort

5

Verwendung Array#some, some() Die Methode überprüft, ob ein Element in dem Array den Test durch die vorgesehene Funktion implementiert gibt.

let needles = ['one', 'two', 'three'] 
 
let str = 'one in every thousand will quit their jobs'; 
 

 
let bool = needles.some(function(el) { 
 
    return str.indexOf(el) > -1; 
 
}); 
 
console.log(bool);

+0

Ich wusste nicht, 'Array' hatte eine' Some' Methode. Vielen Dank. – BugHunterUK

+0

@BugHunterUK - Hier ist die [__reference__] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) für Sie! – Rayon

2

können Sie verwenden Array.protype.some() und String.prototype.includes():

needles.some(function(needle) { 
    return str.includes(needle); 
}); 

Oder ihre lodash der Äquivalente:

_.some(needles, function(needle) { 
    return _.includes(str, needle); 
}); 
2

Verwenden Sie _.some(), um die Nadeln zu iterieren und zu testen, ob sie in der Zeichenfolge gefunden werden können.

Wenn jedoch viele Nadeln vorhanden sind, kann es effizienter sein, sie in einen regulären Ausdruck zu konvertieren.

let needleRE = new RegExp(needles.map(_.escapeRegExp).join('|')); 
let found = needleRE.test(str); 
+0

Sie möchten diese Nadeln "escapeReg", wenn Sie mit ihnen eine Regex erstellen. – Blorgbeard

+0

@Blorgbeard Das ist keine Standard-JS-Funktion, also habe ich gerade einen Link zu einer anderen Frage eingefügt, die den Code dafür anzeigt. – Barmar

+0

Seit OP erwähnt lodash, ich bezog sich auf lodashs Funktion: https://lodash.com/docs#escapeRegExp – Blorgbeard

1
let needles = ['one', 'two', 'three'] 
let str = 'one in every thousand will quit their jobs' 

let joinedNeedles = needles.join("|"); 
let regex = new RegExp(joinedNeedles) 

let matches = str.match(regex) // ['one'] 

Spiele werden ein Array von angepaßten Einsen zurück.

Verwandte Themen