Я предполагаю, что это связано со значениями в ваших данных, которые не имеют атрибутов colors
. Я вижу, по крайней мере, несколько из них.
Если вы обрабатывали неизвестные значения, скажите
var sortOrder = {"#F39849": 0, "#E94927": 1, "#538296": 2, "#CCCCCC": 3, "unknown" : 100};
и
return sortOrder[p1.colors || 'unknown'] - sortOrder[p2.colors || 'unknown'];
Скорее всего, будет работать.
Возможно, вы захотите обработать случай, когда colors
найден, но отсутствует в вашем списке, что, вероятно, можно обработать с помощью
return ((sortOrder[p1.colors || 'unknown'] + 1) || Infinity) -
((sortOrder[p2.colors || 'unknown'] + 1) || Infinity);
Infinity
s должны переместить все не найденные в конец списка, и нам нужно +1
s, чтобы избежать выполнения 0 || Infinity
.