jquery按值计算多维数组

时间:2013-03-30 23:14:42

标签: javascript jquery multidimensional-array count

请帮我计算表格中的具体数值。

我有这种形式的一些数据:

var data = {
    "metadata": ["FZ", "CS", "CU", "CZ"],
        "values": [
        ["CON", "184.0", "null", "null"],
        ["ERG SRL", "35.0", "null", "57.0"],
        ["IO", "6.0", "null", "null"],
        ["IND", "null", "1753.0", "null"],
        ["LIXL", "1644.0", "null", "3748.0"],
        ["MOXRL", "2285.0", "null", "0.0"],
        ["MOLXL", "11.0", "null", "0.0"],
        ["MURX", "5362.0", "null", "275.0"],
        ["STRL", "197.0", "null", "39.0"]
    ]
};

以下是results on jsbin。 在该表中,我有一些值,如null0.0和其他。

我想要的只是在他们的键上计算这些值: 例: 这是我的表:

FZ      CS       CU     CZ
CON     184.0   null    null
ERG     35.0    null    57.0
IO      6.0     null    null
IND     null    1753.0  null
LIXL    1644.0  null    3748.0
MOXRL   2285.0  null    0.0
MOLXL   11.0    null    0.0
MURX    5362.0  null    275.0
STRL    197.0   null    39.0

这是我想要的结果:

       CS  CU CZ
all     9  9  9
null    1  8  3
0.0     0  0  2
>0      8  1  4

唯一的结果是当我计算生成的表格中的单元格时,但如果我想要分页则这不好。

我根据stackoverflow.com上的几个答案尝试了.length()count++,但没有结果。

谢谢大家的提示和答案。

2 个答案:

答案 0 :(得分:2)

function countValues(values, column, search) {
  var total = 0;

  for(var i  = 0; i < values.length; i++) {
    if(values[i][column] === search)
      total++;   
  }

  return total;
}

How to use: countValues(data.values, 2, "null")

在你的例子中:

FZ is column 0   

CS is column 1

CU is column 2

CZ is column 3

我希望它显而易见。

here is a Fiddle

但我建议使用AngularJS下划线

等框架

答案 1 :(得分:1)

这是一个将所有数据一直映射到创建表

的解决方案

HTML:

<table id="counter"></table>

JS:

var tableHeader=['<tr><th></th>'];
/* final mapped object, structured to make html generation and search of metadata vs category easy*/
/* arrays wil contain category count in same array order as metadata*/  
var catObj = {'all':[], 'null':[], '0.0':[], '&gt;0':[]};/* "&gt;" used intentionally vs ">" due to html entity*/
/* create header row and populate count arrays with zeros*/
$.each(data.metadata,function(i,item){
    tableHeader.push('<th>'+item+'</th>');
    $.each(catObj,function(key,arr){
        arr[i]=0;
    });    
});

tableHeader.push('</tr>');


/* categorize the values and update appropriate counter array*/
$.each(data.values,function(i,arr){
    $.each(arr, function(idx, val){ 
         catObj[getCategory(val)][idx] ++;
    });
});
/* create the table rows from counter arrays*/
var rowsHtml=[];
$.each( catObj,function(key,arr){
   rowsHtml.push('<tr><td>'+key+'</td>');
    rowsHtml.push( '<td>'+arr.join('</td><td>')+'</td></tr>');  
});
/*insert table html*/
$('#counter').html( tableHeader.join('')+rowsHtml.join('')) 


 /* helper to do categorizing of each value*/      
function getCategory(value) {
    if (isNaN(value)) {
        return value != 'null' ?  'all': 'null';
    } else {
        return value == 0 ? '0.0' : '&gt;0';
    }
}

DEMO:http://jsfiddle.net/ykuzg/4

编辑

如果需要,可以根据元数据值搜索最终对象,如下所示:

function searchCats( meta, category){
   return catObj[category][ $.inArray(meta, data.metadata) ]; 
}

使用率

searchCats('FZ', 'all') // returns 9