使用 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。
我现在正在努力思考 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。