2017-12-28 9 views
0

私は文字のリストがすべて単語に存在するかどうかをチェックする関数を実装しようとしています。Javascriptでマップの包含ブロックから戻る方法はありますか?

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; 
} 

マップを使用するとすべて比較的エレガントです。私が気になるのは、手紙がないことがわかったら、二番目の地図から戻ることができないということです。だから私は変数を使用し、これを返す必要があります。これはコード内の余分な2行です。

このコードを最適化する方法はありますか?

+0

ブレークは含むブロックから戻りませんが。私はまだ変数を維持し、それを返す必要があります。 – sbtpr

+0

タイトルよりも多くを読んでおけば助けになるでしょう... – jonrsharpe

+2

'.map()'を使ってその結果を無視している人々にとって、この傾向は何ですか?これは、 '.reduce()'の場合、または命令的ループの場合のいずれかです。 '.map()'を使うことはここではあまりにも奇妙です。 –

答えて

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

またはループのために、昔ながらの使用:

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; 
} 

またはセット使用:

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

最初のものは素晴らしいです。 – sbtpr

関連する問題