我想从数组中获得最小值。如果数据包含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);
答案 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 ?“一个较大的值,这样就不会低于最小标准”:“原始值”)
希望这会有所帮助!