我正在开发一个Javascript和d3.js应用程序,我想在其中跟踪上传的数据集中的唯一值。使用一个新的Javascript Set对象似乎很吸引人,但我找不到一个好方法来提取集合的最大值和最小值。我的代码:
var mySet = new Set();
mySet.add(5);
mySet.add(10);
mySet.add(20);
console.log( d3.max(mySet) );
这会产生undefined
而不是20。
我已经尝试了.elements()
、.values()
和.keys()
Set函数,它们将SetIterator对象传递给d3.max()
,但也返回undefined
。Chrome目前似乎不支持使用Array.from
。
有什么建议吗?我意识到这可能是浏览器特有的,因为Set对象已经推出;我正在Chromev 44上开发,我也考虑过使用对象对象作为字典,但也找不到一种简洁的方法来让max/min与该结构一起工作。
编辑:我最初问这个问题时使用了数组和数字作为集合元素。
5条答案
按热度按时间3vpjnl9f1#
您可以使用
apply
在一行中查找最大值和最小值w8f9ii692#
d3.max
只接受一个数组(docs)。现在,您正在向d3.max
传递一个集合,如下所示:何时应该传递这样的数组
以下是您应该如何做:
ma8fv8wu3#
值得注意的是,自从这个问题发布以来已经过去了6年,从D3v6开始,原来的问题不再存在。从那个版本开始(见修改日志),d3-array模块的方法接受迭代。因为
Set
本身就是iterable,所以原来的代码可以正常工作:第一个
7y4bm7vi4#
对于Chrome 45+,通过使用
Set.prototype.values()
和Array.from()
,应该能够在不创建单独数组的情况下完成此操作,如下所示:如果您不想使用
d3.max()
,则Math.max()
与spread运算符也可以使用:uelo1irk5#
您可以将原生JavaScript解构运算子与搭配使用,以找出Set中的最大值。