JavaScript:如何从字符串数组中选择一个不那么随机的元素.也就是说,某些元素应该更频繁地返回
JavaScript: How to select a not-so-random element from an array of strings. That is, certain elements should be returned more often
我读过一些关于从数字数组中选择元素的更高概率和钟形曲线的文章,但我有一个字符串数组要从中选择。我的网站上有一堆DIV,我想从一组6种颜色中随机选择颜色:
var colors = new Array('red', 'orange', 'yellow', 'green', 'blue', 'purple');
比方说我真的很喜欢红色。我怎么能调整下面的代码来获取一个"随机"元素,但让"红色"比其他元素更受欢迎呢?即,我希望它大部分时间都返回"红色"。
$('.box').each(function() {
// Get a "random" color
var randomColor = colors[Math.floor(Math.random()*colors.length)];
$(this).css('background-color', randomColor);
});
我意识到我可以在数组中多次添加"red",但我正在努力避免这种情况。还是有完全不同的方法?谢谢
您可以创建另一个与充满颜色的数组一样长的数组,并为它们分配概率(即,整个数组必须加起来为1)。从这里生成一个介于1和0之间的数字,当你迭代概率数组时,从中减去。一旦它达到0,就取该索引并返回相应的颜色。我不擅长JavaScript,但我会尝试的。
var colors = new Array('red', 'orange', 'yellow', 'green', 'blue', 'purple');
var probabilities = new Array(0.5 , 0.1, 0.1, 0.1, 0.2);
var prob = Math.random()
var i=0;
for (i=0;i<probabilities.length && prob > 0;i++)
{
prob = prob - probabilities[i];
}
var color = colors[i];
我认为这应该奏效。
此外,很难说你有多喜欢红色,但这里有一种可能的方法:
var randomColor = colors[Math.random() > 0.5
? Math.floor(Math.random() * colors.length) : 0];
在这种情况下,红色将以比其他颜色高0.5的概率被选择。
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- JavaScript:如何从字符串数组中选择一个不那么随机的元素.也就是说,某些元素应该更频繁地返回