javascript – 什么是从表数据中删除列的最佳方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 什么是从表数据中删除列的最佳方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3138字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 什么是从表数据中删除列的最佳方法?](/upload/InfoBanner/zyjiaocheng/818/26c79ac5d83648a4bbd0a2bf9b8860fa.jpg)
请考虑以下数据:
[
{ time: '5:00', name: 'bran', fruit: 'pear', numEaten: 3},
{ time: '5:00', name: 'rickon', fruit: 'apple', numEaten: 2},
{ time: '6:00', name: 'bran', fruit: 'apple', numEaten: 5},
{ time: '6:00', name: 'rickon', fruit: 'grape', numEaten: 1},
{ time: '6:00', name: 'bran', fruit: 'pear', numEaten: 2},
{ time: '6:00', name: 'eddard', fruit: 'pear', numEaten: 2},
{ time: '7:00', name: 'rickon', fruit: 'apple', numEaten: 7}
]
我想要做的是删除一个列,并添加所有具有匹配列的行的’numEaten’.所以想象一下:你实际上并不关心什么时候吃水果,你只想知道谁吃了多少什么.所以输出表看起来像:
[
{name: 'bran', fruit: 'pear', numEaten: 5},
{name: 'bran', fruit: 'apple', numEaten: 2},
{name: 'rickon', fruit: 'apple', numEaten: 9},
{name: 'rickon', fruit: 'grape', numEaten: 1},
{name: 'eddard', fruit: 'pear', numEaten: 2},
]
我一直在查看下划线中的各种javascript数组原型函数和扩展,但我看不到一种特别优雅的方法来做到这一点.我想有一个原型函数:
function aggregate(data, column, aggregateColumn) // aggregate(data, 'time', 'numEaten')
那将执行此操作.从概念上讲,我正在考虑为每个不是column或aggregateColumn的列运行_.groupBy(),但这样做似乎有些麻烦.有没有更好的办法?
编辑
似乎没有一个单行解决方案:在收集以下解决方案的反馈后,发布我想出的内容.请注意,与原始问题不同,这会使列保留,而不是删除,并适用于任何架构.
var aggregate = function(data, aggregateColumn, keepColumns) {
keepColumns = keepColumns || [];
if(!Array.isArray(keepColumns)) {
keepColumns = [ keepColumns ];
}
var removeColumns = _.difference(_.keys(data[0]), keepColumns.concat(aggregateColumn));
var grouped = _.groupBy(data, function(d) {
return _.reduce(keepColumns, function(o, col) {
return o + d[col] + '-';
}, '');
});
return _.map(grouped, function(mapData) {
var reduced = _.reduce(keepColumns, function(o, col) {
o[col] = mapData[0][col];
return o;
}, {}
);
reduced[aggregateColumn] = _.reduce(mapData, function(o, aggrData) {
return o + aggrData[aggregateColumn];
}, 0
);
return reduced;
});
}
解决方法:
这是在下划线中执行此操作的一种方法
让我们定义初始数据
var data = [
{ time: '5:00', name: 'bran', fruit: 'pear', numEaten: 3},
{ time: '5:00', name: 'rickon', fruit: 'apple', numEaten: 2},
{ time: '6:00', name: 'bran', fruit: 'apple', numEaten: 5},
{ time: '6:00', name: 'rickon', fruit: 'grape', numEaten: 1},
{ time: '6:00', name: 'bran', fruit: 'pear', numEaten: 2},
{ time: '6:00', name: 'eddard', fruit: 'pear', numEaten: 2},
{ time: '7:00', name: 'rickon', fruit: 'apple', numEaten: 7}
]
然后,通过加入它们来创建基于名称和水果的组.
var groups = _.groupBy(data, function(value){
return value.name+ '#' + value.fruit;
});
稍后我们将在聚合时使用此自定义求和函数.
function sum(numbers) {
return _.reduce(numbers, function(result, current) {
return result + parseFloat(current);
}, 0);
}
现在,通过提取numEaten并获取它们的总和来映射组
var out = _.map(groups, function(group){
return {
name: group[0].name,
fruit: group[0].fruit,
numEaten: sum(_.pluck(group, 'numEaten'))
}
});
最后,我们的输出像 –
out
[
{name: 'bran', fruit: 'pear', numEaten: 5},
{name: 'bran', fruit: 'apple', numEaten: 5},
{name: 'rickon', fruit: 'apple', numEaten: 9},
{name: 'rickon', fruit: 'grape', numEaten: 1},
{name: 'eddard', fruit: 'pear', numEaten: 2},
]
内容总结
以上是互联网集市为您收集整理的javascript – 什么是从表数据中删除列的最佳方法?全部内容,希望文章能够帮你解决javascript – 什么是从表数据中删除列的最佳方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。