在javascript - 時間表中生成特定範圍內和給定條件的隨機數

釀造網絡開發

我為每個單獨的乘數(2 - 10 的數字)生成了一組隨機數字(生成的數字)。

儘管不像預期的那樣,代碼本身確實會生成數字。

當前行為:

  • 它在數組中呈現數字(有時是重複的)(例如 2x4 和 2x4)
  • 它每次呈現不同長度的數組
  • 呈現的數字乘法值是重複的(如果有一個具有 4x7 和 7x4 的對象,它應該用新值替換這些集合中的一個)
  • number 對像在給定條件下呈現(例如,數字 9 乘數將至少呈現一次,但不超過 3 次)

預期行為:

  • 它為每個乘數呈現一組唯一的數字
  • 始終以相同的長度呈現數組(長度 === 18)
  • 檢查乘數和生成的數字的乘法是否與數組中的值匹配,如果是,則在其中呈現另一組數字(仍在條件內)

這是我到目前為止所得到的

const randomNumbersGenerator = () => {
  function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min) + min);
  }

  const number2 = getRandomInt(0, 2);
  const number3 = getRandomInt(0, 3);
  const number4 = getRandomInt(0, 3);
  const number5 = getRandomInt(0, 3);
  const number6 = getRandomInt(1, 4);
  const number7 = getRandomInt(1, 4);
  const number8 = getRandomInt(1, 4);
  const number9 = getRandomInt(1, 4);
  const number10 = getRandomInt(0, 2);
  const number11 = getRandomInt(0, 3);

  const randomNumber = () => getRandomInt(2, 12);
  let current;
  const numbersArray = [];

  for (let i = 0; i < number2; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 2,
        generated: current
      });
    }
  }

  for (let i = 0; i < number3; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 3,
        generated: current
      });
    }
  }

  for (let i = 0; i < number4; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 4,
        generated: current
      });
    }
  }

  for (let i = 0; i < number5; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 5,
        generated: current
      });
    }
  }

  for (let i = 0; i < number6; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 6,
        generated: current
      });
    }
  }

  for (let i = 0; i < number7; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 7,
        generated: current
      });
    }
  }

  for (let i = 0; i < number8; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 8,
        generated: current
      });
    }
  }

  for (let i = 0; i < number9; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 9,
        generated: current
      });
    }
  }

  for (let i = 0; i < number10; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 10,
        generated: current
      });
    }
  }

  for (let i = 0; i < number11; i += 1) {
    if (numbersArray.indexOf((current = randomNumber())) === -1) {
      numbersArray.push({
        multiplier: 11,
        generated: current
      });
    }
  }

  console.log(numbersArray);
  return numbersArray;
};
randomNumbersGenerator();

你也可以通過codeSandbox查看:https ://codesandbox.io/s/upbeat-jang-coqd5 ? file =/ src/index.js:660-672

蘭迪·卡斯本

我想這就是你要找的。我採取了完全不同的方法。

首先,我使用Map是因為它很容易確保唯一性。(鍵必須是唯一的)

注意我使用一個簡單的字符串作為鍵來確保它們是唯一的(使用那裡的對像有點複雜)

ranges數組代表您的“number2、number3”等。

循環開始於2滿足您的乘數範圍 (2 - 11)。這需要一些技巧才能正確獲得索引錐。

這會生成唯一的對(作為鍵),映射的值是生成的值和乘數相乘。

大小和地圖打印在控制台中。

const randomNumbersGenerator = () => {
  function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min) + min);
  }
  const randomNumber = () => getRandomInt(2, 12);
  const multiplierMap = new Map();
  const ranges = [[0, 2], [0, 3], [0, 3], [0, 3], [0, 3], [1, 4], [1, 4], [1, 4], [1, 4], [0, 2], [0, 3]];
  while(multiplierMap.size < 17) {
    for (let i = 2; i < ranges.length+1; i++) {
      const randomInt = randomNumber();
      if(Array.from(multiplierMap.values).includes(randomInt * i)){
        --i;
      } else {
        multiplierMap.set(randomInt + " " + i, randomInt * i);
      }
      if(multiplierMap.size === 18) break;
    }
  }
  console.log('MultiplierMap size: ', multiplierMap.size);
  for(let [pair, multiple] of multiplierMap){
    console.log('Generated Multiplier: ' + pair, '||', 'Generated * Multiplier: ' + multiple);
  }
  return multiplierMap;

};
randomNumbersGenerator();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript使用最小值/最大值計算範圍內的間隔並映射到n個大小的數組索引

在特定溫度範圍內轉換給定數字列表的程序出現問題

非異步javascript函數競爭條件

給定部分日期時間,解析日期時間範圍或持續時間

使用javascript中的條件更新嵌套數組

僅當條件為 True 時才使用 Eel 在 Python 中調用 JavaScript 函數

輸入條件如何決定密碼中的字符數?Javascript

當它應該是隨機的時,javascript函數返回相同的值

JavaScript 隨機消息

找出一個數字在給定範圍內的排名?

javascript中-x和x之間的隨機元素

隨機時間戳和更大的“權重”到特定範圍

隨機化 wordset javascript 數組

在SAS範圍內滿足特定條件時刪除行

在不同範圍內執行函數:Javascript

如何在與javascript中的固定總和匹配的範圍內生成n個隨機數?

給定特定條件,如何使用 Pandas 和 groupby 計算一段時間內列的滾動平均值?

平台倉位隨機生成 - 不在可能範圍內生成

c# - 如何從一個範圍內只生成一個隨機值

JavaScript (React):如何將異步函數的等待擴展到給定的時間

如何在基板範圍內生成隨機數?

在reactjs中生成隨機數組

如何訪問在 Cypress/Javascript 的外部範圍內的函數內更新的變量?

當時間戳不正確時,在python中獲取給定時間範圍的數據

生成範圍內的隨機數字、字母或字符

如何獲得隨機數學數字和運算符並在 Javascript 中得到它的答案

在 JavaScript 中為我的牌組生成卡片時出現隨機錯誤

為什麼我在 JavaScript 中生成的隨機二進制數據高度可壓縮?

在 C# 中不斷生成特定範圍內的唯一和隨機值