我正在尝试根据另一个数组的属性动态创建数组变量。示例数据:
var arr = [{category: 'bill', date: '2017/04/29', total: 35049.48999999998},
{category: 'bill', date: '2017/05/12', total: 249.03},
{category: 'bill', date: '2017/11/05', total: 568.5499999999998},
{category: 'electrical appliance', date: '2017/08/09', total: 3930.76},
{category: 'electrical appliance', date: '2017/03/28', total: 532.1},
{category: 'food', date: '2017/08/09', total: 639.05},
{category: 'food', date: '2017/08/31', total: 2653.05}];
我想要实现的是,我想为每个类别创建一个数组,然后将动态创建的数组作为参数传递给另一个函数。
我这样做的原因是因为我想计算上周和本周每个类别的支出总额,并将它们显示在不同的部分。
例如,本周食品支出为 639.05,上周食品支出为 2653.05。本周电器消费3930.76等
我真正不确定的是如何将类别分组为一个临时变量,然后将临时变量传递给另一个函数以供我计算本周/上周的支出。
我已经有一个函数来计算本周/上周的支出并且它运行良好,该函数的参数是一个数组,在这种情况下,我试图将类别组合在一起然后单独传递它而不是只需传递包含所有类别的数组即可执行计算。
我怎样才能真正做到这一点?谢谢!
最佳答案
您可以使用对象进行分组和迭代组,您可以获取对象的键并迭代它们。
var array = [{ category: 'bill', date: '2017/04/29', total: 35049.48999999998 }, { category: 'bill', date: '2017/05/12', total: 249.03 }, { category: 'bill', date: '2017/11/05', total: 568.5499999999998 }, { category: 'electrical appliance', date: '2017/08/09', total: 3930.76 }, { category: 'electrical appliance', date: '2017/03/28', total: 532.1 }, { category: 'food', date: '2017/08/09', total: 639.05 }, { category: 'food', date: '2017/08/31', total: 2653.05 }],
groups = Object.create(null);
array.forEach(function (o) {
groups[o.category] = groups[o.category] || [];
groups[o.category].push(o);
});
console.log(groups.food); // just food
console.log(groups);
// iterate keys of groups and some values
Object.keys(groups).forEach(function (k) {
groups[k].forEach(function (o) {
console.log(k, o.date);
});
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
要访问单个已知类别,您可以使用 property accessor , 喜欢
groups.food // dot notation groups['electrical appliance'] // bracket notation
关于JavaScript 动态创建和填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46129336/