2017-11-08 20 views
2

配列に重複が含まれているかどうかをチェックする簡単な関数を書いていますが、そうでない場合はtrueを返します。JavaScript戻り値が返されない

function containsDuplicates(a) { 
    var hash = {}; 
    a.forEach((elem, index) => { 
     if (hash[elem] === undefined) { 
      hash[elem] = 1; 
     } else { 
      console.log('true') 
      return true; 
     } 

     if (index === a.length - 1) { 
      console.log('false') 
      return false; 
     } 
    }) 
} 

var arr = [1, 2, 3, 4]; 
containsDuplicates(arr) 

私のconsole.logは正常に記録されますが、復帰には当たらないようです。私のすべての関数は毎回未定義に戻ります。これはなぜですか?

+0

forEachの代わりに 'for ... of'を使用してください。 – lilezek

+3

あなたは間違った方法を使用しています。 some()またはevery()を使用する必要があります。 – epascarello

答えて

6

あなたはforEach()に渡されたコールバックから戻ってきます。

1

foreachに渡したコールバックから戻ってきます。代わりに、このようなものを試してみるべきです。

function hasDuplicates(array) { 
    var keyStore = {}; 
    for (var i = 0; i < array.length; ++i) { 
    var value = array[i]; 
    if (value in keyStore) { 
     return true; 
    } 
    keyStore[value] = true; 
    } 
    return false; 
} 
関連する問題