Math.min.apply为null返回0

时间:2012-08-05 15:57:41

标签: javascript

我想从数组中获得最小值。如果数据包含null值,则Math.min.apply会为0值返回null。请参阅this JSFiddle example。即使数组中存在空值,我怎样才能得到真正的最小值?

代码(与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);

6 个答案:

答案 0 :(得分:9)

嗯,null的数值是0。如果您不希望考虑null值,则必须将其过滤掉:

var values = arrayObject.map(function(o){
    return o.y;
}).filter(function(val) {
    return val !== null
});

参考Array#filter

答案 1 :(得分: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;
}));

答案 2 :(得分:4)

我认为代替映射属性,过滤掉null值并应用Math.min/max(正如其他答案所示),reduce function将为您节省一些时间和代码,直接应用逻辑:

var arrayObject= [ {"x": 1, "y": 5}, {"x": 2, "y": 2}, {"x": 3, "y": 9}, {"x": 4, "y": null}, {"x": 5, "y": 12} ];
var min = var arrayObject.reduce(function(m, o) {
    return (o.y != null && o.y < m) ? o.y : m;
}, Infinity);
var max = var arrayObject.reduce(function(m, o) {
    return (o.y != null && o.y > m) ? o.y : m;
}, -Infinity);

答案 3 :(得分:0)

var validArray = $.grep( arrayObject, function(item, _){
                    return item.y != null;
               });
//That gives a new array without null values for "y"

现在做..

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

答案 4 :(得分:0)

这些是我在2020年一直使用的代码。代码略短。

const min = (values) => values.reduce((m, v) => (v != null && v < m ? v : m), Infinity);
const max = (values) => values.reduce((m, v) => (v != null && v > m ? v : m), -Infinity);

const arrayObject = [
  { x: 1, y: 5 },
  { x: 2, y: 2 },
  { x: 3, y: 9 },
  { x: 4, y: undefined },
  { x: 5, y: 12 },
];
const yValues = arrayObject.map((item) => item.y)

console.log(yValues)
console.log('min', min(yValues))
console.log('max', max(yValues))

答案 5 :(得分:-1)

您是否曾在min函数中尝试过条件(三元)运算符

如果Value为Null ?“一个较大的值,这样就不会低于最小标准”:“原始值”)

希望这会有所帮助!