我有一个CSV,我将通过csv加载到内存中,以数组的形式返回,该数组将为每个数据行返回一个具有键值对的对象数组,其中键为列,值为与该列关联的数据。因此:
[{col1: 'id1', col2: '123', col3: '12/01/12'},
{col1: 'id1', col2: '100', col3: '12/01/12'},
{col1: 'id2', col2: '-100', col3: '12/01/12'},
{col1: 'id2', col2: '123', col3: '13/01/12'}]
我想要做的是基于特定列的分组数据,例如,对于数据12/01/12上的id1,总和为col2列。或者对于id2,12年2月1日到12年13月1日之间col2中的值有什么区别。
对JS来说还算是新的(1周),因此,对此的任何建议将不胜感激。
最佳答案
对于分组,我将使用数组过滤器方法。如果您希望在过滤后的数组中包含数组元素,则该函数应返回true。因此,要获取col1为'id1'和col3为'12 / 01/12'的行,您可以这样做:
var data = [{col1: 'id1', col2: '123', col3: '12/01/12'},
{col1: 'id1', col2: '100', col3: '12/01/12'},
{col1: 'id2', col2: '-100', col3: '12/01/12'},
{col1: 'id2', col2: '123', col3: '13/01/12'}];
var grouped = data.filter( function(row) {
return row.col3 == '12/01/12' && row.col1 == 'id1';
});
要对组中的列求和,可以使用Array reduce方法。它以“减少”功能作为第一个参数,该功能将数组的元素减少为单个值。它以一个起始值作为其可选的第二个参数。约简函数必须有两个参数。在第一次迭代中,第一个参数是指定的起始值,在以后的迭代中,它是函数在前一次迭代中的返回值。 reduce函数的第二个参数是数组的元素。因此,要汇总分组数据的第二列,您需要执行以下操作:
var sumOfGrouped = grouped.reduce(function(sumSoFar, row) { return sumSoFar + parseInt(row.col2) }, 0);
查看其他Array方法,您将发现其他可能对您有用的方法,具体取决于您要执行的操作。
关于javascript - 用Javascript分组数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43640604/