使用 lodash 将子列表提升为父列表

elevate a child list to parent with lodash

我现在正在努力思考 lodash,想弄清楚如何用它来处理这种特殊情况,而不是编写 foreach 循环。

对象具有活动和任务的结构。 ActivityList 有很多活动。每个 activity 都有简单的属性和一组任务。每个任务数组都有简单的属性。我想生成一个 table,其中列出了所有活动的所有任务,其中包含一些 activity 属性。

例如:

{
"Activities": [{
    "Name": "Activity1",
    "Tasks": [{
        "Name": "Task1",
        "Complete": "90%"
    }, {
        "Name": "Task2",
        "Complete": "40%"
    }, {
        "Name": "Task3",
        "Complete": "97%"
    }]
}, {
    "Name": "Activity2",
    "Tasks": [{
        "Name": "Task4",
        "Complete": "100%"
    }, {
        "Name": "Task5",
        "Complete": "25%"
    }, {
        "Name": "Task6",
        "Complete": "17%"
    }]
}]
}

我希望这个出现

    Activity1 Task1 90%
    Activity1 Task2 40%
    Activity1 Task3 97%
    Activity2 Task4 100%

我想我已经掌握了单独使用基本命令的窍门,但在将它们链接在一起时我遗漏了一些东西。我认为这需要 map、flattendeep 和 pluck 的某种组合,但我一直无法弄清楚。任何帮助将不胜感激。谢谢

您可以执行以下操作:

var data = { ... }; // your object with the activities array

var result = _.flatMap(data.Activities, function (activity) { 
    return _.map(activity.Tasks, function (task) { 
        return { activity: activity.Name, task: task.Name, complete: task.Complete };
    });
});

然后结果将解析为一个对象数组:

 [
    {"activity":"Activity1","task":"Task1","complete":"90%"},
    {"activity":"Activity1","task":"Task2","complete":"40%"},
    {"activity":"Activity1","task":"Task3","complete":"97%"},
    {"activity":"Activity2","task":"Task4","complete":"100%"},
    {"activity":"Activity2","task":"Task5","complete":"25%"},
    {"activity":"Activity2","task":"Task6","complete":"17%"}
]

您可以循环遍历这些项目来创建您的 table。