JavaScript 在第二个 for 循环上始终生成相同的数字

问题描述 投票:0回答:1

剧本:

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)。是什么导致了这种行为?

javascript arrays function for-loop random
1个回答
0
投票

您正在尝试获取 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

© www.soinside.com 2019 - 2024. All rights reserved.