我正坐在以下阵列问题上:
我正在使用它:
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]
只会再次返回第一个数组。
我很无能......
有没有办法给我一个元素数量最多的数组或数组及其倒数第二个元素?
谢谢!
答案 0 :(得分:3)
使用此代码:
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
组成的新数组。 1}}。longestLen
更新为当前最长数组的长度。else if(data.length == longestLen) longest.push(data)
- 如果当前数组与最长数组的长度相同,则推送现有数组longest
中的当前数组。答案 1 :(得分:1)
您可以将数组映射到它们的长度,并且只返回元素数量最多的元素(这是排序数组中第一个元素的数量):
[[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]]
答案 2 :(得分:0)
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));