根据两个属性的唯一组合拆分对象数组

时间:2018-12-03 19:23:38

标签: arrays vue.js ecmascript-6

对于我的时间跟踪应用程序,我将时间条目存储在一个对象数组中,每个对象看起来像这样:

{
  date: "20181206",
  hours: "4",
  projectId: "65WchP9X46HlOYUzmWrL",
  taskId: "fJTU7wggJHbg1uRuRUdHjS5mn8J3"
}

我需要通过ProjectId-TaskId属性的唯一组合将所有对象分组到单独的数组中,以便每个结果数组都能获得一个特定项目和一个特定任务(一个数组)的所有条目。 project #1 / task #1project #1 / task #2,另一个project #2 / task #1等)。

我知道如何使用一个属性来实现这一点,但是是否有一种简单的方法可以通过两个属性来实现相同的目的?

注意:我的全局数组最初是这样填充的:

weekTimes = [];
querySnapshot.forEach((doc) => {
  weekTimes.push(doc.data());
});

1 个答案:

答案 0 :(得分:1)

projectIdtaskId创建一个组合键:

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)