我正在使用递归,它在下面的代码中返回null

时间:2017-09-03 15:12:52

标签: javascript arrays recursion ecmascript-6

据我说hideLetters应该返回一个数组。谁能告诉我这里有什么问题?它返回null。

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

1 个答案:

答案 0 :(得分:0)

hideLetters内,有一个return null声明。除非第一次致电(checkHiddenCount(gameArray) >= hiddenLetters)时条件truehideLetters,否则hideLetters将始终返回null

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