2

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

var myArray = [[1,2,3],[1,2,3,4],[1,2],[1,2]];

我试图找到第一个最短的数组myArray,在这种情况下是myArray[2].

显然我可以写一个循环,检查每个数组的长度并返回最小的一个。我想知道是否有一种非常干净或更简洁的方法可以在 javascript 中执行此操作。类似这样的东西:http: //ejohn.org/blog/fast-javascript-maxmin/

谢谢!

4

3 回答 3

9

那么你可以这样做:

var shortest = myArray.reduce(function(p,c) {return p.length>c.length?c:p;},{length:Infinity});

这使用了一个内部循环,因此它比手动运行自己的循环更快,但需要一个 shim 才能在旧浏览器中工作。

于 2013-08-16T16:18:40.643 回答
1

您正在寻找使用 max 或 min 的方式如下所示。

Math.max.apply(Math, $.map(array, function (index) { return index.length }));

诀窍是映射到内部数组长度属性。

于 2013-08-16T16:22:27.473 回答
0

如果最好的意思是最快的时间.. 你不会得到比 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]是最短的数组。

于 2013-08-16T16:29:33.230 回答