Javascript 获取过滤对象数组的JS中的最大值
我有一组对象,如:Javascript 获取过滤对象数组的JS中的最大值,javascript,arrays,Javascript,Arrays,我有一组对象,如: var myArr = [{ number: 5, shouldBeCounted: true }, { number: 6, shouldBeCounted: true }, { number: 7, shouldBeCounted: false }, ...]; 如何为应计入设置为true的对象查找最大编号?我不想使用循环,只是想知道这在Math.max.apply(或类似的东西)中是否可行。所有解决方案都需要遍历数组,除
var myArr = [{
number: 5,
shouldBeCounted: true
}, {
number: 6,
shouldBeCounted: true
}, {
number: 7,
shouldBeCounted: false
}, ...];
如何为
应计入设置为true
的对象查找最大编号
?我不想使用循环,只是想知道这在Math.max.apply
(或类似的东西)中是否可行。所有解决方案都需要遍历数组,除非在添加到数组之前要在变量中存储max number。不,这是不可能的。您可以像这样将Math.max
与.map
一起使用
var myArr=[{
编号:5,
应该考虑到:是的
}, {
编号:6,
应该考虑到:是的
}, {
编号:7,
应该考虑:错误
}];
var max=Math.max.apply(数学,myArr.map(函数(el)){
如果(应计入标高){
返回el.number;
}
返回-无限;
}));
控制台日志(最大值)使用简单的.reduce()
:
var myArr=[{
编号:5,
应该考虑到:是的
}, {
编号:6,
应该考虑到:是的
}, {
编号:7,
应该考虑:错误
}];
var max=myArr.reduce(函数(最大值,当前值){
返回current.shouldbeccounted?数学最大值(max,current.number):max;
},-无穷大);
控制台日志(最大值)代码>另一个不太详细的解决方案(如果您的数字都是正数):
不可能。你可以像@Alexander那样用.map
来Math.max
,你把它写在评论中而不是答案中。。。因为?如果所有元素都有应该被计算
false
那么有什么特别的原因允许应用而不是循环呢?我想任何答案都会在你的物体上形成一个循环。有什么理由限制吗?也就是说,如果所有数字都是负数,则返回5e-324
(奇怪的是)。将Number.MIN_值
替换为-Infinity
可以修复此问题。
var max = Math.max.apply(Math, myArr.map(function(el) {
return el.number*el.shouldBeCounted;
}));