请帮我计算表格中的具体数值。
我有这种形式的一些数据:
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。
在该表中,我有一些值,如null
,0.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++
,但没有结果。
谢谢大家的提示和答案。
答案 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
我希望它显而易见。
但我建议使用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':[], '>0':[]};/* ">" 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' : '>0';
}
}
DEMO:http://jsfiddle.net/ykuzg/4
编辑:
如果需要,可以根据元数据值搜索最终对象,如下所示:
function searchCats( meta, category){
return catObj[category][ $.inArray(meta, data.metadata) ];
}
使用率
searchCats('FZ', 'all') // returns 9