【发布时间】:2021-04-08 10:13:51
【问题描述】:
为什么container.push(random[0]) 不起作用?
我找不到问题的解决方案...我需要将 HTML 对象放入容器数组中,但它并没有放在那里。
let container = new Array();
let x = document.querySelectorAll('.trigger');
function getFlag() {
let random = [x[Math.floor(Math.random() * x.length)]];
if (!container.includes(random[0])) {
random[0].classList.remove('trigger');
console.log('random n: ' + random[0]);
container.push(random[0]);
}
}
console.log('x length: ' + x.length)
console.log('array length: ' + container.length)
.trigger {
display: none;
}
<body onload="getFlag()">
<section class="trigger">
<p>1</p>
</section>
<section class="trigger">
<p>2</p>
</section>
<section class="trigger">
<p>3</p>
</section>
</body>
【问题讨论】:
-
为什么你认为
push不起作用?<section>元素 is 在最后的数组中。不要将所有内容连接到一个字符串;使用console.log("random n:", random[0])来测试您的价值观。使用console.log(container.slice());查看阵列的当前状态;我没有看到您在任何地方实际确认您的预期结果。random是一个数组并一直得到random[0]而不是random有什么意义? -
如果您指的是
console.log('array length: ' + container.length)显示0而不是1,原因是console.log()在getFlag()之前执行,实际上可以将元素推入@ 987654337@。如果您将该行移到getFlag()函数体内,您将看到它正确显示1。 -
好吧,我想使用
random,但如果我将random.classList.remove('trigger')提供给classList,它会给我一个错误。 -
那是因为你将
random设置为一个数组;如果您将let random = [x[Math.floor(Math.random() * x.length)]];替换为let random = x[Math.floor(Math.random() * x.length)];(没有最外面的方括号),您可以仅使用random而不是random[0]来引用该元素 -
哦,哇,我不知道这可能谢谢!现在我已经修复了我的代码。谢谢大家!
标签: javascript arrays random