javascript – 在crossfilter.js中按多个维度排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在crossfilter.js中按多个维度排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1422字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 在crossfilter.js中按多个维度排序](/upload/InfoBanner/zyjiaocheng/792/c369842c52754e2ab986832b08fdf7e4.jpg)
我正在使用Mike Bostock的crossfilter库来过滤和排序大型数据集.我的问题:给定一个具有多个维度的数据集,我如何一次对多个维度进行排序?
测试数据集:
[
{ cat: "A", val:1 },
{ cat: "B", val:2 },
{ cat: "A", val:11 },
{ cat: "B", val:5 },
{ cat: "A", val:3 },
{ cat: "B", val:2 },
{ cat: "A", val:11 },
{ cat: "B", val:100 }
]
所需输出的示例,按cat排序,val(升序):
[
{ cat: "A", val:1 },
{ cat: "A", val:3 },
{ cat: "A", val:11 },
{ cat: "A", val:11 },
{ cat: "B", val:2 },
{ cat: "B", val:2 },
{ cat: "B", val:5 },
{ cat: "B", val:100 }
]
到目前为止我使用的方法是在所需的维度上使用字符串连接:
var combos = cf.dimension(function(d) { return d.cat + '|' + d.val; });
这适用于多个基于字符串的维度,但不适用于数字维度,因为它不是自然排序(‘4’> ’11’).我想我可以在数字上使用零填充来完成这项工作,但是对于大型数据集来说这可能会变得昂贵,所以我宁愿避免使用它.有没有其他方法可以在这里工作,使用crossfilter?
允许不同尺寸具有不同排序方向(升序/降序)的任何解决方案的加分点.
澄清:是的,我可能需要切换到本机Array.sort实现.但是使用crossfilter的重点在于它非常非常快,特别是对于大型数据集,它以一种使重复排序更快的方式缓存排序顺序.所以我真的在寻找一个基于crossfilter的答案.
解决方法:
我知道它不使用crossfilter库,但为什么不使用sort函数来执行此操作?
var combos = cf.sort(function(a,b) {
if(a.cat == b.cat) return a.val < b.val ? -1 : 1;
return a.cat < b.cat ? -1 : 1;
});
为了允许不同的维度具有不同的排序方向,只需将-1换成1,反之亦然
内容总结
以上是互联网集市为您收集整理的javascript – 在crossfilter.js中按多个维度排序全部内容,希望文章能够帮你解决javascript – 在crossfilter.js中按多个维度排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。