Math.min.apply为null返回0

Jer*_*rin 5 javascript

我想从数组中获得最小值.如果该数据包含null的值,Math.min.apply返回0null值.请看这个JSFiddle示例.即使数组中存在空值,如何获得真正的最小值?

代码(与JSFiddle示例相同):

var arrayObject= [ {"x": 1, "y": 5}, {"x": 2, "y": 2}, {"x": 3, "y": 9}, {"x": 4, "y": null}, {"x": 5, "y": 12} ];

var max = Math.max.apply(Math, arrayObject.map(function(o){return o.y;}));
var min = Math.min.apply(Math, arrayObject.map(function(o){return o.y;}));

$("#max").text(max);
$("#min").text(min);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 9

那么,数值null0.如果您不希望null考虑值,则必须将其过滤掉:

var values = arrayObject.map(function(o){
    return o.y;
}).filter(function(val) {
    return val !== null
});
Run Code Online (Sandbox Code Playgroud)

参考:Array#filter

  • 或者将`null`映射到`Infinity`.会节省一些字节和额外的`n`函数调用. (2认同)

Mat*_*all 6

替代Felix的解决方案:把null作为+-分别无穷最低和最高要求.

var max = Math.max.apply(Math, arrayObject.map(function(o) {
    return o.y == null ? -Infinity : o.y;
}));
var min = Math.min.apply(Math, arrayObject.map(function(o) {
    return o.y == null ? Infinity : o.y;
}));
Run Code Online (Sandbox Code Playgroud)