Как переписать функцию, чтобы она возвращала объект, который будет переписан во внешней области видимости? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь написать приложение для лотереи со следующей логикой:

  1. Пользователь вставляет массив из 6 чисел и количества розыгрышей.
  2. API получает информацию ивыполните следующие шаги:
    • Создайте выигрышный массив при каждом розыгрыше;
    • Сравните выигрышный массив с пользовательским массивом;
    • поместите результаты в новый массив, который считаетчисло правильных чисел обновить приз пользователя (добавив деньги);

Сейчас я не знаю, как переписать функцию таким образом, поэтому она получит два массива,сравните их и обновите объект, указав сумму выигранных денег и массив с результатами.

Я пытался создать отдельный объект внутри функции - безуспешно.

(Да, похоже, мой глобальный объект перезаписывается каждый раз, когда функция вызывает )

Вот мой код:

const LotteryController = {
  simulate: (req, res) => {
    const { numbers, draws } = req.body;
    let winArray;

    InputValidation(numbers, draws);

    const spentMoney = 5 * draws;
    let userResults;

    // Counting the number of winning numbers in the ticket, adding that number to the array
    const numbersCounter = function numbersCounter(userArr, winArr) {
      let counter = 0;
      const results = {
        wonMoney: 0,
        winNumArray: [0, 0, 0, 0, 0, 0, 0],
      };
      for (let i = 0; i < userArr.length; i += 1) {
        if (winArr.includes(userArr[i])) {
          counter += 1;
        }
      }
      switch (counter) {
        case 0:
          results.winNumArray[0] += 1;
          break;
        case 1:
          results.wonMoney += 5;
          results.winNumArray[1] += 1;
          break;
        case 2:
          results.wonMoney += 10;
          results.winNumArray[2] += 1;
          break;
        case 3:
          results.wonMoney += 28;
          results.winNumArray[3] += 1;
          break;
        case 4:
          results.wonMoney += 775;
          results.winNumArray[4] += 1;
          break;
        case 5:
          results.wonMoney += 55000;
          results.winNumArray[5] += 1;
          break;
        case 6:
          results.wonMoney += 25000000;
          results.winNumArray[6] += 1;
          break;
        default:
          throw new Error('Request is invalid');
      }

      return results;
    };

    for (let i = 1; i <= draws; i += 1) {
      // Generating a random array of 6 numbers

      // let winArray = [...Array(6)].map(() => Math.floor(Math.random() * 53));
      // winArray = [...new Set(winArray)];

      winArray = new Set();
      while (winArray.size < 6) winArray.add(Math.floor(Math.random() * 53));
      winArray = Array.from(winArray);

      userResults = numbersCounter(numbers, winArray);
      console.log(userResults);
    }

    const responseObject = {
      input: {
        numbers,
        draws,
      },
      results: {
        spent: spentMoney,
        won: userResults.wonMoney,
        matches: userResults.winNumArray,
      },
    };

    ApiResponse.success(res, responseObject);
  },
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...