Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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或coffeescript中获取最大值_Javascript_Jquery_Arrays_Coffeescript - Fatal编程技术网

在多维数组javascript或coffeescript中获取最大值

在多维数组javascript或coffeescript中获取最大值,javascript,jquery,arrays,coffeescript,Javascript,Jquery,Arrays,Coffeescript,我有一个如下所示的数组: array = [[1, 5], [4, 7], [3, 8], [2, 3], [12, 4], [6, 6], [4, 1], [3, 2], [8, 14]] 我需要的是集合第一个值的最大值,因此在本例中为12。 通过在线查看一些示例,我发现实现这一点的最佳方法是: Math.max.apply Math, array 问题是,这只适用于一维数组。我该如何为我的senario实现这一点?(允许使用jquery) 最终解决方案: 这不是问题的一部分,

我有一个如下所示的数组:

array = [[1, 5], [4, 7], [3, 8], [2, 3],  
 [12, 4], [6, 6], [4, 1], [3, 2], 
 [8, 14]]
我需要的是集合第一个值的最大值,因此在本例中为
12
。 通过在线查看一些示例,我发现实现这一点的最佳方法是:

Math.max.apply Math, array
问题是,这只适用于一维数组。我该如何为我的senario实现这一点?(允许使用jquery)


最终解决方案:

这不是问题的一部分,但我需要数组中的最小值和最大值,这会稍微改变一些情况

    unless device.IE
        justTheDates    = magnitudeArray.map (i) -> i[0]
        @earliest       = Math.min.apply Math, justTheDates
        @latest         = Math.max.apply Math, justTheDates                 
    else
        @earliest       = magnitudeArray[0][0]
        @latest         = magnitudeArray[0][0]
        for magnitudeItem in magnitudeArray
            @earliest   = magnitudeItem[0] if magnitudeItem[0] < @earliest
            @latest     = magnitudeItem[0] if magnitudeItem[0] > @latest
除非设备.IE
justTheDates=magnitudeArray.map(i)->i[0]
@最早=Math.min.apply Math,justTheDates
@最新=Math.max.apply Math,justTheDates
其他的
@最早=震级数组[0][0]
@最新=震级阵列[0][0]
用于震级数组中的震级项
@最早=震级项目[0],如果震级项目[0]<@最早
@最新=震级项目[0],如果震级项目[0]>@latest

因此,首先使用
array.map()
将二维数组转换为平面数组,然后使用
Math.max()
可以使用
.reduce()

array.reduce(function(max, arr) { 
    return Math.max(max, arr[0]); 
}, -Infinity)
array.reduce(function(max, arr) {
    return max >= arr[0] ? max : arr[0];
}, -Infinity);

这是一个不使用
Math.max
的版本

array.reduce(function(max, arr) { 
    return Math.max(max, arr[0]); 
}, -Infinity)
array.reduce(function(max, arr) {
    return max >= arr[0] ? max : arr[0];
}, -Infinity);

…和a.

使用咖啡脚本中的理解:

Math.max.apply Math, (x[0] for x in array)

另外,请看_underline.js

  • 它的读、写和维护效率更高
_下划线最棒的部分是,还有大约一百个类似于_max.Like sort的助手函数

比较以下语法:

var sortedObject = _.sortBy(object, function(val, key, object) {
    return val;
});
他们很容易链,并解释! (就像道格拉斯·克罗克福德可能建议的那样)

在中提供了一个非常好的解决方案

如果您始终使用原始JavaScript执行数组操作,请查看_underline.js,它可以大大简化代码

希望有帮助, 祝你一切顺利!
Nash

使用下划线.js的简单解决方案,可避免生成中间数组:

max = _(array).max(_.first)[0]
()

样本输入: 最大的四个([[4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1])

函数最大四(arr){
var最大值=0;
var largestArr=[];

对于(var i=0;i我知道这是一篇老文章,但如果您(或其他人)想要整个数组中的最大数字,请尝试:

var array = [[1, 5], [4, 7], [3, 8], [2, 3],  
 [12, 4], [6, 6], [4, 1], [3, 2], 
 [8, 14]];

var max = array.reduce(function (max, arr) {
    return max >= Math.max.apply(max, arr) ? max : Math.max.apply(max, arr);
}, -Infinity);
console.log(max);

在本例中,它将返回值14。

我不熟悉。map您能解释一下那里发生了什么吗?@freshyeball:---因此它对每个元素应用回调。在您的例子中,每个
I
都是一个由2个元素组成的
[1,5]
-数组,您只需返回第一项。
arr.map()之后
已应用。您有另一个数组,其中包含每个嵌套数组的第一个元素。我想我的问题是…是。映射比循环效率高还是低?@Freshyeball:我确信它非常接近,而且我也确信这不是您现在需要考虑的问题。选择您可以阅读/维护更好的解决方案OffeeScript通常建议node,但可能值得注意的是,
Array#map
不受支持“它只是更高效”——库如何比底层语言更高效?好问题,编写(阅读和维护)更高效。感谢@zerkms.+1.编辑的说明。我不会包含一个完整的新库。请解决这个问题。正确。这是针对那些“使用原始JavaScript一致地执行数组操作”的人。有些环境就是这样。如果要维护高级算法,这可能对您来说是一个优化。它还附带了一个强大的高级数据绑定模板引擎。坦率地说,我对下划线印象不深。+1是一个经典的折叠示例:)。咖啡脚本:
max=array.reduce((max,arr)->Math.max,arr[0]),-Infinity
我看到更多的人支持这个答案。有人愿意为我接受的答案辩护吗?@Freshyeball:我不想说一个比另一个好。a
.reduce()
只是将数组计算为一个值。
.map()
基本上是一个
.reduce())
将其计算为一个新集合。因此可以使用
.reduce()
实现
.map()
行为,如下所示:
array.reduce(函数(arr,curr){arr.push(curr[0]);return arr;},[])
。然后您仍然可以使用
Math.max.apply…
。使用
.map()的优势
使用
.apply的风格是避免重复调用
Math.max
。直接减少到一个数字的好处可能是有点清晰。有趣。是的,我发现了垫片的工作原理,并为ie8实现了一个循环-@tq:
return Math.max.apply(Math,arr.concat(max))
Splats:
Math.max(x[0]用于阵列中的x)…
:)我不打算包含一个完整的新库,只需解决这个问题。好的,那么其他解决方案会更好:)。下划线有许多有用的小函数,根据我的经验,这些函数经常使用;而且它只有4KB,因此,如果是因为库的大小,那么在包含它时不会有太多膨胀的危险。
var array = [[1, 5], [4, 7], [3, 8], [2, 3],  
 [12, 4], [6, 6], [4, 1], [3, 2], 
 [8, 14]];

var max = array.reduce(function (max, arr) {
    return max >= Math.max.apply(max, arr) ? max : Math.max.apply(max, arr);
}, -Infinity);
console.log(max);