2017-12-28 18 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; 
} 

지도를 사용하면 비교적 우아합니다. 나를 귀찮게하는 것은 편지가 없다는 것을 발견하면 두 번째지도에서 돌아올 수 없다는 것입니다. 그래서 변수를 사용하고 이것을 반환해야합니다. 이것은 코드에서 두 개의 추가 행입니다.

이 코드를 최적화 할 수있는 방법이 있습니까?

+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