查找 Javascript 集中的最大/最小值

emu*_*ing 7 javascript d3.js

我正在开发一个 Javascript 和 d3.js 应用程序,我想在其中跟踪上传的数据集中的唯一值。使用新的 Javascript Set 对象之一似乎很有吸引力,但我无法找到一种提取集合的最大值和最小值的好方法。我的代码:

var mySet = new Set();
mySet.add(5);
mySet.add(10);
mySet.add(20);
console.log( d3.max(mySet) );
Run Code Online (Sandbox Code Playgroud)

这产生undefined的不是 20。

我尝试过.elements(),.values().keys()Set 函数,它们将 SetIterator 对象传递给d3.max(),但也返回undefinedArray.fromChrome 目前似乎不支持使用。

有什么建议么?我意识到,随着 Set 对象的推出,这可能是特定于浏览器的;我正在 Chrome v44 上进行开发。我还考虑过使用对象对象作为字典,但也无法找出一种简洁的方法来让 max/min 与该结构一起使用。

编辑:我最初使用数组和数字的混合作为集合元素来问这个问题。仅使用元素时,该问题在 Chrome 中仍然出现,如上所述

Lal*_*dav 5

您可以使用以下命令在一行中查找最大值和最小值apply

const mySet = new Set([1, 2, 9, 7, 8]);
Math.max.apply(this, [...mySet]);
Math.min.apply(this, [...mySet]);
Run Code Online (Sandbox Code Playgroud)


che*_*iel 2

d3.max只需要一个数组(docs)。现在,您正在传递一个d3.max如下所示的集合:

{ [5,10,20], 21 }
Run Code Online (Sandbox Code Playgroud)

当你应该传递这样的数组时

[5,10,20,21]
Run Code Online (Sandbox Code Playgroud)

您应该这样做:

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) ); 
Run Code Online (Sandbox Code Playgroud)