jquery / javascript - 如何比较最大数量的元素的数组,检索数组?

时间:2011-10-21 10:20:59

标签: javascript jquery arrays multidimensional-array

我正坐在以下阵列问题上:

  • 我有四个数组1,2,3,4
  • 每个可以包含任意数量的元素
  • 我正在寻找具有最多元素(及其倒数第二个元素)的数组

我正在使用它:

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]只会再次返回第一个数组。

我很无能......

有没有办法给我一个元素数量最多的数组或数组及其倒数第二个元素?

谢谢!

3 个答案:

答案 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)
})

会发生什么?

  1. var data = ...检索数组。
  2. if(data.length > longestLen) - 将当前数组的长度与已知的最长长度进行比较。
    如果新数组的大小更大,请将longest替换为由元素{{data组成的新数组。 1}}。
    longestLen更新为当前最长数组的长度。
  3. 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));