我正在开发一个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()
设置函数,它们将SetIterator对象传递给d3.max()
,但也返回undefined
。目前,Chrome中似乎不支持使用Array.from
。
有什么建议吗?我意识到这可能是特定于浏览器的,因为Set对象会被推出;我正在开发Chrome v44。我还考虑过将对象对象用作字典,但无法找到一种简洁的方法来获得最大/最小值来处理该结构。
编辑:我最初使用数组和数字混合作为设置元素来问这个问题。如上所述,仅在使用元素时Chrome仍会出现此问题
答案 0 :(得分:2)
d3.max
只接受一个数组(docs)。现在,您传递的集合为d3.max
,如下所示:
{ [5,10,20], 21 }
何时应该传递像这样的数组
[5,10,20,21]
这是你应该怎么做的:
var mySet = new Set();
mySet.add(5);
mySet.add(10);
mySet.add(20);
mySet.add(21);
myArray = []
// convert set to array
for (v of mySet) {
myArray.push(v)
}
console.log( d3.max(myArray) );
答案 1 :(得分:0)
对于Chrome 45以上版本,应该可以这样进行,而无需使用Set.prototype.values()
和Array.from()
创建单独的数组,如下所示:
var mySet = new Set([1,2,3,3,2,1]);
var setMax = d3.max(Array.from(mySet.values()));
console.log(setMax);
如果您不想使用d3.max()
,那么Math.max()
可以与散布运算符一起使用:
var mySet = new Set([1,2,3,3,2,1]);
var setMax = Math.max(...Array.from(mySet.values()));
console.log(setMax);
答案 2 :(得分:0)
您可以使用 option_name
apply
答案 3 :(得分:0)