减少数组的长度 - Javascript
Decrease length of array - Javascript
我创建了一个从 1 到 51 的随机唯一数字数组 //[0,1,2,3,4...,51]
我想从该数组中取 5 个随机数示例 //[3,5,27,31,44]
现在我不想从主数组中删除这些数字,所以数组的减少量减少了 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>
我创建了一个从 1 到 51 的随机唯一数字数组 //[0,1,2,3,4...,51]
我想从该数组中取 5 个随机数示例 //[3,5,27,31,44]
现在我不想从主数组中删除这些数字,所以数组的减少量减少了 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>