比方说,我有一个如下所示的数组:
var myArray = [[1,2,3],[1,2,3,4],[1,2],[1,2]];
我正在尝试在myArray
内找到第一个最短的数组,在这种情况下是myArray[2]
。
显然我可以写一个循环,检查每个数组的长度并返回最小的数组。我想知道的是,如果在javascript中有一个非常干净或切割方式。有点像这样:http://ejohn.org/blog/fast-javascript-maxmin/
谢谢!
答案 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]
是最短的数组。