我有一个包含颜色的对象数组。我需要按特定顺序按颜色对数组进行排序。
我使用来自 stackoverflow的答案按特定顺序对数组进行排序,并且大部分都有效。我现在面临的问题是,当我使用 D3J 对其进行可视化时,不是将所有具有匹配颜色的对象都放在一起,而是按照指定的顺序重复颜色。为什么会发生这种情况,我怎样才能得到正确的排序。
var sortOrder = {"#F39849": 0, "#E94927": 1, "#538296": 2, "#CCCCCC": 3};
var sortedData = data.sort(function (p1, p2) {
return sortOrder[p1.colors] - sortOrder[p2.colors];
});
完整代码在这里
我猜这与您的数据中没有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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句