2017-09-03 26 views
-1

根据我的hideLetters应该返回一个数组。任何人都可以让我知道这里有什么问题吗?它返回null。我正在使用递归,它在下面的代码中返回null

我正在尝试创建hang子手游戏的简化版本。这里, 默认函数获取'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()); 
     }; 

这是洗牌代码

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

您是否尝试过调试?这是相当可疑的,有一个明确的返回null,你抱怨它返回null ... –

+0

我使用ESLINT。如果我不在箭头函数的末尾放置返回语句,则会引发此警告。 “预计在箭头功能结束时返回”。另外,即使我正在发表这个声明。它永远不会到达那里。因为,我在返回null之前递归地调用函数。而且,在递归结束时,它应该在指定的IF条件下返回。 –

回答

0

里面hideLetters有一个return null声明。除非条件(checkHiddenCount(gameArray) >= hiddenLetters)true当你第一次打电话hideLetters,hideLetters将永远返回null

另请注意,当您递归调用hideLetters函数时,您没有使用它的返回值。

+0

非常感谢。我只是使用“return hideLetters(gameArray,hiddenLetters);”它像一个魅力。感谢您指出了这一点。 –

+0

不客气! – ninjin

相关问题