Colors.random = function() {
var result;
var count = 0;
for (var prop in this.names)
if (Math.random() < 1/++count)
result = prop;
return { name: result, rgb: this.names[result]};
};
我想确保一旦调出它就不会出现相同的颜色。目前它将继续生成随机颜色,有时会显示相同的颜色。
此外,我需要清除之前使用过的所有颜色,因此整个过程可以从头开始。
答案 0 :(得分:2)
Colors.called = {};
Colors.random = function () {
var keys = Object.keys(this.names),
max = keys.length,
called = Object.keys(this.called),
color = keys[Math.floor(Math.random() * (max - 0)) + 0];
if (Colors.called[color]) {
if (max === called.length) {
Colors.called = {};
}
return Colors.random();
}
Colors.called[color] = true;
return { name: color, rgb: this.names[color] };
};
答案 1 :(得分:1)
您可以使用所有颜色代码/名称填充数组(不确定您需要哪一个)并在返回之前删除所选元素。
var colorFactory = (function () {
var allColors = ["red", "green", "blue"];
var colorsLeft = allColors.slice(0);
return {
getRandomColor: function () {
if (colorsLeft.length === 0) {
return undefined;
}
var index = Math.floor(Math.random() * colorsLeft.length);
var color = colorsLeft[index];
colorsLeft.splice(index, 1);
return color;
},
reset: function () {
colorsLeft = allColors.slice(0);
}
};
}());
// Usage:
// Get a random color
var someColor = colorFactory.getRandomColor();
// Reset: mark all colors as unused
colorFactory.reset();