我正在尝试使此脚本更简洁,因为将来我将添加更多的语句。
x = Math.floor((Math.random() * 9) + 1);
var one = document.getElementById("test");
if(x === 1) {
one.style.backgroundColor = "red";
}
if(x === 2) {
one.style.backgroundColor = "blue";
}
if(x === 3) {
one.style.backgroundColor = "yellow";
}
答案 0 :(得分:6)
您可以将属性和值存储在一个普通对象中
const o = {1:'a',2:'b',3:'c'}
one.style.backgroundColor = o[x]
答案 1 :(得分:1)
如果您不需要将随机值用于其他目的,则可以获取一个数组并检查是否有truthy值用于设置颜色。
var x = ['red', 'blue', 'yellow'][Math.floor(Math.random() * 9)],
one = document.getElementById("test");
if (x) one.style.backgroundColor = x;
<div id="test">test</div>
答案 2 :(得分:1)
另一个解决方案可能是在ids
和colors
之间创建一个Map。请注意,这样可以为non-consecutive
索引定义值。另外,例如,您可以将多个映射分配给某种颜色,以赋予它们更大的可能性。
let bgColor = new Map();
bgColor.set(1, {bg:"red", c:"black"});
bgColor.set(2, {bg:"blue", c:"white"});
bgColor.set(3, {bg:"green", c:"red"});
bgColor.set(4, {bg:"skyblue", c:"black"});
bgColor.set(5, {bg:"maroon", c:"white"});
bgColor.set(6, {bg:"red",c:"black"});
bgColor.set(7, {bg:"red",c:"black"});
bgColor.set(8, {bg:"BlueViolet", c:"white"});
var one = document.getElementById("test");
setInterval(function()
{
let x = Math.floor((Math.random() * 9) + 1);
let {bg, c} = bgColor.get(x) || {};
console.log(x, bg, c);
if (bg)
{
one.style.backgroundColor = bg;
one.style.color = c;
}
}, 1000);
<div id="test">I'm Gonna be Iron Like a Lion in Zion</div>
答案 3 :(得分:0)
另一种可能性是,如果您的最终目标是简单地在多个相等权重的值之间随机选择,则可以编写一个接受这些值的简单函数,然后返回一个或返回一个函数,该函数在调用时返回一个。这是第二个版本:
const randomChoice = (vals) => () => vals[Math.floor(vals.length * Math.random())]
const randomColor = randomChoice(['red', 'blue', 'yellow'])
document.body.style.backgroundColor = randomColor()
randomChoice
是一个实用函数,可能存储在其他位置,randomColor
生成您需要的项目之一。
这可能无法满足您的需求。但是,如果三个分支只是占位符,并且您最终需要代码建议的九个分支,那么这可能是最容易更新的。
可以将其扩展为处理不等的权重,但是会更加复杂。在很多地方,这种随机选择可能会有用。
答案 4 :(得分:0)
另一种实现方法是实现简单的体重系统。
const colors = [
{ color: 'skyblue', weight: 1 },
{ color: 'orangered', weight: 2 },
{ color: 'black', weight: 1 },
{ color: 'teal', weight: 3 }
].reduce((res, {color, weight}) => [...res, ...Array(weight).fill(color)],[]);
const randomColor = () => colors[Math.floor(colors.length * Math.random())];
// Demo
Array(50).fill().forEach(() => {
const el = document.createElement('div');
const color = randomColor();
el.innerText = color;
el.style.backgroundColor = color;
document.body.append(el);
});