根据公共属性对对象进行分组是数据处理中的常见任务。此代码片段提供了一种使用普通 JavaScript 方法对数组中的对象进行分组的有效解决方案。
虽然 Underscore.js 提供了 groupBy 函数,但其实现可能不如果您需要“合并”结果而不是单独的组,则适合。
以下脚本定义一个对对象数组进行操作的 groupBy 函数:
var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); };
按“Phase”对对象进行分组:
const data = [ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, ... ]; const groupedByPhase = groupBy(data, 'Phase');
groupedByPhase 将包含:
{ "Phase 1": [ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, ... ], "Phase 2": [ { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, ... ] }
进一步分组“步骤”:
const groupedByPhaseStep = _(groupedByPhase).values().map(phase => { return groupBy(phase, 'Step'); }).value();
groupedByPhaseStep 将包含:
[ { "Phase": "Phase 1", "Step": "Step 1", "Value": 15 }, ... ]
以上是如何使用普通方法在 JavaScript 中有效地对对象数组进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!