剧本:
let col1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
let col2 = [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
for(let i = 0; i < 5; i++) {
const random = Math.floor(Math.random() * col1.length + 1)
const index = col1.indexOf(random)
const number = col1.at(index)
col1.splice(index, 1)
console.log(number)
}
for(let i = 0; i < 5; i++) {
const random = Math.floor(Math.random() * col2.length + 1)
const index = col2.indexOf(random)
const number = col2.at(index)
col2.splice(index, 1)
console.log(number)
}
第一个 for 循环始终从第一个数组生成 5 个随机数。但第二个 for 循环始终显示相同的结果(30、29、28、27、26)。是什么导致了这种行为?
您正在尝试获取 col2 中值的索引。您有一个包含 15 个项目的数组。您的索引将始终小于 16(第二组中的最小数字),并且通过扩展,
col2.indexOf(random)
将始终返回 -1,因为小于 16 的随机值不在该数组中,而 indexOf 返回 -1如果它找不到您提供的值的索引。与 -1 拼接将返回数组中的最后一个值,这就是为什么你会得到 30-26。请参阅 MDN 文档以获取 indexOf:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf