javascript - 如何根据数组长度将整数随机设置为类名?
问题描述
我正在尝试为不同的部分标签随机设置一些 css 规则,但我不知道最终会得到多少个部分标签。如果有 10 个部分标签,每个部分应该有一个介于section0
to之间的随机类名section9
。它需要随机化,而不是按顺序排列。
我读到了document.getElementByTagName
,我可以通过使用 for 循环为类名分配一个整数,但我不确定在哪里以及如何Math.floor(Math.random() * myArray.length)
正确实现和返回它。
function myFunction(){
var randomize = document.getElementsByTagName("section");
for (i = 0; i <= randomize.length; i++) {
randomize[i].className = "section" + i;
}
}
我试过了i = Math.floor(Math.random() * randomize.length);
并返回randomize[i].className = "section" + i;
但这似乎不起作用。我正在尝试合并我一直在阅读的两件事,但我不确定如何正确地这样做。
解决方案
这个版本的解决方案随机生成一个取决于有多少部分的数字。它跟踪数组中已经使用的数字。只要一个号码已经被使用过,它就会继续尝试。
var sections = document.querySelectorAll('section');
var usedValues = [];
[...sections].forEach(function(section){
var classAssigned = false;
while (!classAssigned) {
let randomNumber = Math.floor(Math.random() * 100 * sections.length) % sections.length;
if (classAssigned = !usedValues.includes(randomNumber)) {
section.classList.add('section'+ randomNumber);
usedValues.push(randomNumber);
}
}
});
<section>A</section>
<section>B</section>
<section>C</section>
<section>D</section>
<section>E</section>
<section>F</section>
<section>G</section>
<section>H</section>
<section>I</section>
<section>J</section>
<section>K</section>
<section>L</section>
<section>M</section>
<section>N</section>
推荐阅读
- c# - Linq 内同一列上的多个条件
- python - 文件未从 xml 正确转换为 JSON
- node.js - 为什么我们需要 thunk.withExtraArgument?
- amazon-ecs - AWS ECS。如何确保只有一个任务实例正在运行?
- python - Pandas:多行数据模式到单行
- entity-framework - ConnectionString 问题 Entity-Framework
- linux - 在 alpine dockerfile 中运行 Postgres 失败
- laravel - 在 El Capitan 上安装 homebrew php 失败 @ nghttp2 依赖
- node.js - 使用 Jest 运行测试时无法使用 uuid 模块
- gunicorn - Gunicorn 服务没有出现在 centos8 上