在二维数组中找到最短阵列的最佳方法是什么?

时间:2013-08-16 16:13:55

标签: javascript

比方说,我有一个如下所示的数组:

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

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

显然我可以写一个循环,检查每个数组的长度并返回最小的数组。我想知道的是,如果在javascript中有一个非常干净或切割方式。有点像这样:http://ejohn.org/blog/fast-javascript-maxmin/

谢谢!

3 个答案:

答案 0 :(得分:6)

你可以这样做:

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

这使用内部循环,因此它比手动运行自己的循环更快,但需要填充程序才能在旧浏览器中运行。

答案 1 :(得分:0)

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

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

技巧是映射到内部数组长度属性。

答案 2 :(得分: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]是最短的数组。