2012-03-03 43 views
-3

我需要在javascript中对多维数组的元素进行分组。 这是我的数组:如何按javascript数组中的列进行分组

 var data = []; 
     data.push(["ASIA", "CHINA", 1992, 31689222674, 5]); 
     data.push(["ASIA", "CHINA", 1997, 31327384072, 5]); 
     data.push(["ASIA", "INDIA", 1992, 27910388563, 5]); 
     data.push(["ASIA", "INDIA", 1993, 28669881069, 5]); 
     data.push(["ASIA", "INDIA", 1997, 29421629324, 5]); 
     data.push(["ASIA", "INDONESIA", 1992, 30990831267, 5]); 
     data.push(["ASIA", "INDONESIA", 1997, 31478506122, 5]); 
     data.push(["ASIA", "JAPAN", 1992, 29239959577, 5]); 
     data.push(["ASIA", "JAPAN", 1996, 29901316952, 5]); 
     data.push(["ASIA", "JAPAN", 1997, 29860665098, 5]); 
     data.push(["ASIA", "VIETNAM", 1992, 27229816811, 5]); 
     data.push(["ASIA", "VIETNAM", 1996, 27553006375, 5]); 
     data.push(["ASIA", "VIETNAM", 1997, 27240345298, 5]); 

     data.push(["AMERICA", "BRAZIL", 1992, 31689222674, 5]); 
     data.push(["AMERICA", "BRAZIL", 1993, 31207214888, 5]); 
     data.push(["AMERICA", "BRAZIL", 1994, 31926517793, 5]); 
     data.push(["AMERICA", "EUA", 1992, 27910388563, 5]); 
     data.push(["AMERICA", "EUA", 1993, 28669881069, 5]); 
     data.push(["AMERICA", "EUA", 1994, 29343326950, 5]); 

我通过组合数组的内容需要组元素。我发现了这个代码,但它考虑了一个数组索引。

function group(data, index) { 
    var o; 
    var other = {}; 
    $.each(data, function(i, value) { 
     o = data[i][index];   
     if (!(o in other)) 
      other[o] = []; 
     other[o].push(data[i]); 
    }) 
    return other;   
} 

然后用更多的索引的组应作为一个例子:通过指数1 + 2

ASIA - CHINA => ["ASIA", "CHINA", 1992, 31689222674, 5], 
        ["ASIA", "CHINA", 1997, 31327384072, 5]; 
    ASIA - INDIA => .... 
    ASIA - INDONESIA => ..... 
    ASIA - JAPAN => .... 
    ASIA - VIETNAM => 

    AMERICA - BRAZIL => .... 
    AMERICA - EUA => .... 

此分组还应当对于涉及多个索引以及组工作。

+4

你在问一个问题,或给出指示? – 2012-03-03 00:59:51

回答

9

如果您需要此类功能,强烈建议您使用underscore.js

var groupedData = _.groupBy(data, function(innerArray) { 
    return innerArray[0] + "-" + innerArray[1]; 
}); 

你也可以自定义功能

function groupByTwoIndexes(data, index1, index2) { 
    var o; 
    var other = {}; 
    $.each(data, function(i, value) { 
     o = data[i][index1] + "-" + data[i][index2];   
     if (!(o in other)) 
      other[o] = []; 
     other[o].push(data[i]); 
    }) 
    return other;   
} 

var groupedDataByTwo = groupByTwoIndexes(data, 0, 1); 

Demo

+0

这太棒了!如果你能向我解释执行的细节(执行中),我将不胜感激! – 2012-03-03 01:13:22

+0

太棒了!我没有想到这个改编,谢谢。我更喜欢把这个改编成另一个图书馆。 – 2012-03-03 01:29:12

0

我刚才编辑上面

function group(data, index1, index2) 
{ 

var o; 

var other = {}; 

$.each(data, function(i, value 
{ 
    o = data[i][index1][index2];   
    if (!(o in other)) 
     other[o] = []; 
    other[o].push(data[i]); 
}) 
return other;   

代码}

var result = group(data,0,1); 

所以现在这个数组将被索引1和索引2组成,这些索引是洲和国家。我已经测试过,它正在工作。

相关问题