2017-12-28 6 views
0

Ich versuche eine Funktion zu implementieren, die überprüft, ob eine Liste von Buchstaben alle in einem Wort vorhanden sind.Gibt es eine Möglichkeit, aus dem umschließenden Block einer Map in Javascript zurückzukehren?

function wordHasLatters(word,letters){ 
    let wordChars={}; 
    word.split("").map(c=>wordChars[c]=true); 
    let ok=true; 
    letters.split("").map(l=>ok=ok&&(wordChars[l]!=undefined)); 
    return ok; 
} 

Es ist alles relativ elegant mit Karten. Was mich stört ist, dass ich nicht von der zweiten Karte zurückkehren kann, wenn ich feststelle, dass ein Brief nicht vorhanden ist. Also muss ich eine Variable verwenden und diese zurückgeben. Dies sind zwei zusätzliche Zeilen im Code.

Gibt es eine Möglichkeit, diesen Code zu optimieren?

+0

Ein Bruch wird nicht aus dem umschließenden Block zurück. Ich müsste immer noch eine Variable pflegen und diese zurückgeben. – sbtpr

+0

Es wäre hilfreich, wenn Sie mehr als den Titel lesen würden ... – jonrsharpe

+2

Was ist dieser Trend mit Menschen mit '.map()' und ignorieren das Ergebnis. Dies ist entweder ein Fall für '.reduce()' oder für imperative Schleifen. Die Verwendung von '.map()' ist hier so seltsam. –

Antwort

2
const wordHasLetters = (word,letters) => letters.every(letter => word.includes(letter)); 

oder eine einfache alte for-Schleife:

function wordHasLetters(word, letters){ 
    const hash = {}; 
    for(var char of word) 
    hash[char] = true; 
    for(var letter of letters) 
    if(!hash[letter]) return false; 
    return true; 
} 

oder mit einem Set:

function wordHasLetters(word, letters){ 
    const set = new Set(letters); 
    for(var char of word){ 
    set.delete(char); 
    if(!set.size) return true; 
    } 
    return false; 
} 
+0

Der erste ist einfach wunderbar. – sbtpr

Verwandte Themen