我正在处理下面的数组问题:
- 我有四个数组1 2 3 4
- 每个元素可以包含任意数量的元素
- 我正在寻找具有最高数量元素的数组(以及它的第2到最后一个元素)
我用这个:
var arr = [],
$panels = $(':jqmData(hash="history")'),
$panels.each(function(index) {
//data("stack") contains the array
arr.push($(this).data("stack"));
});
arr.sort(function(a,b){return b.length - a.length});
console.log( arr[0] );
如果数组是这样的[a,b,c] [d,e] [f,g,h,i] [k,l]
控制台显示[ [f,g,h,i] ]
可以,但是如果两个数组有相同的最长长度,就像这样:[a,b,c,d] [d,e] [f,g,h,i] [k,l]
我没有得到[ [a,b,c,d] [f,g,h,i] ]
因为arr[0]
只会再次返回第一个数组。
我无能…
是否有一种方法可以为我提供具有最高数量元素及其倒数第二个元素的数组或数组?
谢谢!
使用以下代码:
var longest = [];
var longestLen = 0;
$('div:jqmData(hash="history")').each(function(){
var data = $(this).data("stack");
if(data.length > longestLen){
longest = [data];
longestLen = data.length;
}
else if(data.length == longestLen) longest.push(data)
})
会发生什么?
-
var data = ...
数组被检索。 -
if(data.length > longestLen)
-将当前数组的长度与已知的最长长度进行比较。
将longest
替换为包含data
元素的新数组
将longestLen
更新为当前最长数组的长度 -
else if(data.length == longestLen) longest.push(data)
-如果当前数组与最长数组的长度相同,则将当前数组压入现有数组longest
中。
您可以将数组映射到它们的长度,并且只返回元素数量最多的元素(即排序数组中第一个元素的数量):
[[1, 2], [7], [3, 4], [], [5]] // the array
.sort(function(a, b) {
return b.length - a.length;
// sort by highest to lowest amount of elements
})
.filter(function(value, index, array) {
return value.length === array[0].length;
// filter by highest length (length of first element)
});
// [[1, 2], [3, 4]]
function arrayFunc(arr) {
var c = [[]];
$.each(arr, function(key, value) {
if(c[0].length == value.length) {
c.push([value]);
}
else {
if(c[0].length <= value.length) {
c = [];
c.push(value);
}
}
});
return c;
}
var a = [[0,1,2],[0,1,2,3],[0,1]];
var b = [[0,1,2],[0,1,2,3],[0,1],[0,1,3,4]];
console.log('result var a');
console.dir(arrayFunc(a));
console.log('result var b');
console.dir(arrayFunc(b));