2017-09-03 3 views
-1

私によればhideLettersは配列を返すべきです。誰でも私に何が間違っているかを教えてもらえますか?ヌルが返されます。私は再帰を使用しており、以下のコードでヌルを返しています

私はハングマンゲームの簡略版を作成しようとしています。ここでは、 デフォルトの関数は 'str'入力を取得します。

import shuffle from '../../scripts/ShuffleArrayUtil'; 

     const checkHiddenCount = (arr) => { 
      let count = 0; 
      for (let i = 0; i < arr.length; i++) { 
      if (arr[i].hidden === true) { 
       count += arr[i].count; 
      } 
      } 
      return count; 
     }; 

     const hideLetters = (gameArr, hiddenLetters) => { 
      const gameArray = JSON.parse(JSON.stringify(gameArr)); 
      if (checkHiddenCount(gameArray) >= hiddenLetters) { 
      console.log('here', gameArray); 
      return JSON.parse(JSON.stringify(gameArray)); 
      } 
      for (let i = 0; i < gameArray.length; i++) { 
      if (gameArray[i].hidden === false) { 
       gameArray[i].hidden = true; 
       break; 
      } 
      } 
      hideLetters(gameArray, hiddenLetters); 


      return null; 
     }; 

     export default (ansStr) => { 
      let gameArr = []; 
      const ansArr = ansStr.split(''); 
      const uniqAnsArr = [...new Set(ansArr)]; 
      const totalLetters = ansArr.length; 
      const hiddenLetters =() => ((totalLetters % 2 === 0) ? (totalLetters/2) : Math.floor(totalLetters/2) + 1); 
      for (let i = 0; i < uniqAnsArr.length; i++) { 
      gameArr.push({ 
       letter: uniqAnsArr[i], 
       count: ansArr.filter((x) => x === ansArr[i]).length, 
       hidden: false, 
      }); 
      } 
      gameArr = shuffle(gameArr); 
      console.log(gameArr); 
      return hideLetters(gameArr, hiddenLetters()); 
     }; 

これはシャッフルコードhideLettersインサイド

export default (deck) => { 
     const randomizedDeck = []; 
     const array = JSON.parse(JSON.stringify(deck)); 
     while (array.length !== 0) { 
     const rIndex = Math.floor(array.length * Math.random()); 
     randomizedDeck.push(array[rIndex]); 
     array.splice(rIndex, 1); 
     } 

    return JSON.parse(JSON.stringify(randomizedDeck)); 
}; 
+0

hideLetterの 'return null'ステートメントの目的は何ですか? – Peter

+0

デバッグを試しましたか?ヌルの明示的なリターンがあり、それがヌルを返すと不平を言っていることはかなり疑わしいです... –

+0

私はESLINTを使っています。矢印関数の最後にreturnステートメントを置かないと、この警告がスローされます。 "矢印機能の終了時にリターンを期待する"。また、私はこの声明を出しています。それは決してそこに届くべきではない。以来、私は再帰的にnullを返す前に関数を呼び出すよ。また、再帰の終了時には、指定されたIF条件に戻る必要があります。 –

答えて

0

return null文があります。あなたが最初hideLettersを呼び出すときの条件(checkHiddenCount(gameArray) >= hiddenLetters)trueでない限り、hideLettersは常にnullを返します。

はまた、あなたが再帰的hideLetters関数を呼び出すとき、あなたはその戻り値を使用していない、ということに気づきます。

+0

ありがとうございました。私はちょうど "戻りhideLetters(gameArray、hiddenLetters);"それは魅力のように働いた。これを指摘してくれてありがとう。 –

+0

あなたは大歓迎です! – ninjin

関連する問題