例如,我有一个如下所示的数组:
var myArray = [[1,2,3],[1,2,3,4],[1,2],[1,2]];
我试图找到第一个最短的数组myArray
,在这种情况下是myArray[2]
.
显然我可以写一个循环,检查每个数组的长度并返回最小的一个。我想知道是否有一种非常干净或更简洁的方法可以在 javascript 中执行此操作。类似这样的东西:http: //ejohn.org/blog/fast-javascript-maxmin/
谢谢!
例如,我有一个如下所示的数组:
var myArray = [[1,2,3],[1,2,3,4],[1,2],[1,2]];
我试图找到第一个最短的数组myArray
,在这种情况下是myArray[2]
.
显然我可以写一个循环,检查每个数组的长度并返回最小的一个。我想知道是否有一种非常干净或更简洁的方法可以在 javascript 中执行此操作。类似这样的东西:http: //ejohn.org/blog/fast-javascript-maxmin/
谢谢!
那么你可以这样做:
var shortest = myArray.reduce(function(p,c) {return p.length>c.length?c:p;},{length:Infinity});
这使用了一个内部循环,因此它比手动运行自己的循环更快,但需要一个 shim 才能在旧浏览器中工作。
您正在寻找使用 max 或 min 的方式如下所示。
Math.max.apply(Math, $.map(array, function (index) { return index.length }));
诀窍是映射到内部数组长度属性。
如果最好的意思是最快的时间.. 你不会得到比 O(N) 更好的解决方案,因为你必须检查数组中的每个元素(假设它是未排序的)。
由于您无法实现比 O(N) 更好的目标,因此我认为没有理由不执行以下操作:
var myArray = [[1,2,3],[1,2,3,4],[1,2],[1,2]];
var shortestIndex = 0;
for( var i=1; i< myArray.length; i++){
if(myArray[shortestIndex].length > myArray[i].length)
shortestIndex = i;
}
现在myArray[shortestIndex]
是最短的数组。