Я считаю, что генерация случайных цветов имеет тенденцию создавать цвета, которые не имеют достаточного контраста на мой вкус.Я нашел самый простой способ обойти это предварительно заполнить список очень разных цветов.Для каждой новой строки назначьте следующий цвет в списке:
// Takes any string and converts it into a #RRGGBB color.
var StringToColor = (function(){
var instance = null;
return {
next: function stringToColor(str) {
if(instance === null) {
instance = {};
instance.stringToColorHash = {};
instance.nextVeryDifferntColorIdx = 0;
instance.veryDifferentColors = ["#000000","#00FF00","#0000FF","#FF0000","#01FFFE","#FFA6FE","#FFDB66","#006401","#010067","#95003A","#007DB5","#FF00F6","#FFEEE8","#774D00","#90FB92","#0076FF","#D5FF00","#FF937E","#6A826C","#FF029D","#FE8900","#7A4782","#7E2DD2","#85A900","#FF0056","#A42400","#00AE7E","#683D3B","#BDC6FF","#263400","#BDD393","#00B917","#9E008E","#001544","#C28C9F","#FF74A3","#01D0FF","#004754","#E56FFE","#788231","#0E4CA1","#91D0CB","#BE9970","#968AE8","#BB8800","#43002C","#DEFF74","#00FFC6","#FFE502","#620E00","#008F9C","#98FF52","#7544B1","#B500FF","#00FF78","#FF6E41","#005F39","#6B6882","#5FAD4E","#A75740","#A5FFD2","#FFB167","#009BFF","#E85EBE"];
}
if(!instance.stringToColorHash[str])
instance.stringToColorHash[str] = instance.veryDifferentColors[instance.nextVeryDifferntColorIdx++];
return instance.stringToColorHash[str];
}
}
})();
// Get a new color for each string
StringToColor.next("get first color");
StringToColor.next("get second color");
// Will return the same color as the first time
StringToColor.next("get first color");
Хотя этот предел ограничен только 64 цветами, я считаю, что большинство людей не могут реально различить разницу послеэто в любом случае.Я полагаю, вы всегда можете добавить больше цветов.
Хотя в этом коде используются жестко запрограммированные цвета, вы, по крайней мере, гарантированно узнаете во время разработки, насколько сильно вы увидите контраст между цветами в производстве.
Список цветов был снят с этот SO ответ , есть другие списки с большим количеством цветов.