减少数组的长度 - Javascript

Decrease length of array - Javascript

  1. 我创建了一个从 1 到 51 的随机唯一数字数组 //[0,1,2,3,4...,51]

  2. 我想从该数组中取 5 个随机数示例 //[3,5,27,31,44]

  3. 现在我不想从主数组中删除这些数字,所以数组的减少量减少了 5

这是我创建的代码:

const filterRandomValue = function (deck) {
          const randomNumbers = deck
            .sort(() => Math.random() - Math.random())
            .slice(0, 5);
        
          return deck.filter((val) => !randomNumbers.includes(val));
        };
    

filterRandomValue(randomUniqueNum(51, 51)) // it returns an array of 46 elements and just for one times it works

我创建了一个按钮,每次单击它时,我都不会减少数字,直到它达到至少等于 5 或​​ >= 5 的数字,但我不知道该怎么做。

因为如果我再次 运行 函数,它将创建一个完整的(51 个元素)数组。

谁能帮帮我??

与其将 randomUniqueNum 直接放入 filterRandomValue 函数,不如尝试使用 randomUniqueNum 创建一个数组,然后使用它。

let myArr = randomUniqueNum(51, 51)
  .sort(() => Math.random() - Math.random())
  .slice(0, 5);
filterRandomValue(myArr); // array length: 46
filterRandomValue(myArr); // array length: 41

错误是每次调用 randomUniqueNum.

时都会生成一个新数组

虽然您的问题现在已经得到解答,但我认为您的代码存在一些根本问题。

如果您在长度为 51 的数组中使用 51 个唯一数字,则 randomUniqueNum 函数毫无意义。按照这个逻辑,数组只是数字 1 到 51,或 0 到 50,具体取决于您从哪里开始。

我认为你应该看看你正在采取的步骤并弄清楚哪些部分是必要的。

这个问题可以通过将创建和编辑分开来解决。创建数组并将其存储在块变量中。然后每次单击按钮时,您都可以在函数中访问该数组。

const filterRandomValue = function(deck) {
  const randomNumbers = deck.sort(() => Math.random() - Math.random()).slice(0, 5);
  return deck.filter((val) => !randomNumbers.includes(val)).sort( (a,b) => +a - +b);
};

const randomUniqueNum = () => {
  let x = 0,
    d = [];
  while (++x < 51) d.push(x)
  return d
}
let array = randomUniqueNum()

window.addEventListener('load', () => {
document.querySelector('.extract').addEventListener('click', () => {
    array = filterRandomValue(array)
    display()
  })
  display()
})

const display = () => {
document.querySelector('.numbers').innerText = array.join(', ')
document.querySelector('.n').innerText = array.length
}
.numbers{
width:400px;
height:100px;
}
<textarea class='numbers'></textarea>
<p>#array items: <span class='n'></span>
  <button class='extract'>extract</button>