Отключение сортировки по весам в layout.PieChart Яндекс.Карт
Как можно отключить сортировку по весам в layout.PieChart?
Я попробовал присвоить properties.data данные в нужной мне последовательности, но слайсы всё равно отображаются от большего веса в меньшему.
Пробовал так (manager — экземпляр ObjectManager):
manager.clusters.events.add('add', function(event) {
var target = event.get('child');
target.properties.data = [
{ weight: 1, color: 'red' },
{ weight: 2, color: 'green' },
{ weight: 3, color: 'blue' },
];
});
Ожидая увидеть начиная сверху красный, зелёный, синий, получаю синий, зелёный, красный, что совсем не радует.
Ответы (2 шт):
Поскольку сортировка автоматическая и не опциональная в API, могу, как некий костыль, предложить разбивать все элементы на нужное количество единичных элементов нужного цвета с нулевой границей:
manager.clusters.events.add('add', function(event) {
var target = event.get('child');
target.properties.data = [
{weight: 1, color: 'red'},
{weight: 1, color: 'green'},
{weight: 1, color: 'green'},
{weight: 1, color: 'blue'},
{weight: 1, color: 'blue'},
{weight: 1, color: 'blue'}
];
});
Так диаграмма должна отображать элементы в порядке добавления.
Самое простое решение - переписать прототип Array.sort:
const originalSort = Array.prototype.sort;
Array.prototype.sort = function(...arguments) {
if(this[0]?.weight && this[0]?.color)
return this;
return originalSort.call(this, ...arguments);
};
Если необходимо выборочно отключать сортировку, то при формировании data для pieChart можно добавить уникальный элемент и проверять его наличие:
const originalSort = Array.prototype.sort;
Array.prototype.sort = function(...arguments) {
if(this[0]?.pieChartNoSort)
return this;
return originalSort.call(this, ...arguments);
};
//Data for pieChart
var data=[
{weight:1, color:'green',pieChartNoSort:1},
{weight:1, color:'red'},
];