Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Math.min.apply为null返回0_Javascript - Fatal编程技术网

Javascript Math.min.apply为null返回0

Javascript Math.min.apply为null返回0,javascript,Javascript,我想从数组中获取最小值。如果数据包含null值,Math.min.apply为null值返回0。请看。即使数组中存在null值,如何获得真正的最小值 代码(与JSFIDLE示例中的代码相同): 嗯,null的数值是0。如果不希望考虑null值,则必须将其过滤掉: var values = arrayObject.map(function(o){ return o.y; }).filter(function(val) { return val !== null }); 参考: 现

我想从数组中获取最小值。如果数据包含
null
值,
Math.min.apply
null
值返回
0
。请看。即使数组中存在null值,如何获得真正的最小值

代码(与JSFIDLE示例中的代码相同):


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

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

现在做

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

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;
}));

我认为,与其映射属性,过滤掉
null
值,然后应用
Math.min/max
(正如其他答案所建议的那样),通过直接应用逻辑,可以节省一些时间和代码:

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);
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(函数(m,o){
返回值(o.y!=null&&o.ym)?o.y:m;
},-无穷大);

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

如果值为空?“一个大值,因此不符合最低标准”:“原始值”)


希望这有帮助

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

const min=(values)=>values.reduce((m,v)=>(v!=null&&vvalues.reduce((m,v)=>(v!=null&&v>m?v:m),-Infinity);
常量数组对象=[
{x:1,y:5},
{x:2,y:2},
{x:3,y:9},
{x:4,y:undefined},
{x:5,y:12},
];
常量yValues=arrayObject.map((项)=>item.y)
console.log(Y值)
console.log('min',min(y值))

log('max',max(yvalue))
您的示例中没有JSON。。。修复。
Math.min
函数对每个数组元素执行(内部函数)
ToNumber()
,从而强制值为Number。我们知道强迫很糟糕
:P
@ŠimeVidas简单地将属性省略将使其
未定义
,这反过来会变成
NaN
,它很容易被
过滤掉。filter(isFinite)
@Esailija是的,这将是一个很好的解决方案。或者将
null
映射到
无穷大
。将节省一些字节和额外的
n
函数调用。@Prinzhorn:是的,那也行。。。只需将它们再次映射为
max
-无穷大。这取决于你将如何处理这些数据,对吗?我仍然得到0,看看这里的forked版本:@Jernej:您只使用了
max
的过滤值,而不是
min
。我从来没有见过无限被使用过。如果可以的话,我会投两次票是否有理由在
数字
上使用常量,文字
无限
(和
-无限
)不是更容易吗?有趣的解决方案。用O表示法的性能增益是多少?
O(n)
与任何其他解决方案都不一样。Landau表示法?没有一个但是通过不创建中间的arraysAh,可以节省一些函数调用和内存。谢谢你的解释。
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;
}));
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);