对于我的时间跟踪应用程序,我将时间条目存储在一个对象数组中,每个对象看起来像这样:
{
date: "20181206",
hours: "4",
projectId: "65WchP9X46HlOYUzmWrL",
taskId: "fJTU7wggJHbg1uRuRUdHjS5mn8J3"
}
我需要通过ProjectId
-TaskId
属性的唯一组合将所有对象分组到单独的数组中,以便每个结果数组都能获得一个特定项目和一个特定任务(一个数组)的所有条目。 project #1
/ task #1
,project #1
/ task #2
,另一个project #2
/ task #1
等)。
我知道如何使用一个属性来实现这一点,但是是否有一种简单的方法可以通过两个属性来实现相同的目的?
注意:我的全局数组最初是这样填充的:
weekTimes = [];
querySnapshot.forEach((doc) => {
weekTimes.push(doc.data());
});
答案 0 :(得分:1)
从projectId
和taskId
创建一个组合键:
grouped = {}
for (weekTime of weekTimes) {
var key = `${weekTime.projectId}/${weekTime.taskId}`
if (grouped[key] === undefined) {
// if the key doesn't exist, weekTime is the first item, create the key
// and assign an array with the first item to it
grouped[key] = [ weekTime ]
} else {
// if the key already exists in grouped, just push new item to that key
grouped[key].push(weekTime)
}
}
// if you don't need the keys
Object.values(grouped)
或使用lodash
groupby
:
const _ = require('lodash')
_.groupBy(weekTimes, x => x.projectId + '/' + x.taskId)