有效地对数组中的对象进行分组
数组可以包含具有多个属性的复杂对象,因此有必要根据特定条件对这些对象进行有效分组。 Underscore.js 提供了方便的 groupby 函数,但它可能无法满足特定要求。
为了实现类似 SQL 的分组(合并而不是拆分值),通常首选自定义方法。下面介绍了一个这样的实现:
var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); };
此函数接受数组 xs 和分组键 key。它迭代数组元素,将它们累积到结果对象 rv 中。每个组由键属性的值标识。
为了进行演示,请考虑以下对象数组:
[ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" }, // ... (more objects) ]
按阶段分组产生:
console.log(groupBy(array, "Phase")); // => { // "Phase 1": [ // // Objects in Phase 1 // ], // "Phase 2": [ // // Objects in Phase 2 // ] // }
按阶段和步骤分组组合值:
console.log(groupBy(array, "Phase", "Step")); // => { // "Phase 1": { // "Step 1": [ // // Objects in Phase 1, Step 1 // ], // "Step 2": [ // // Objects in Phase 1, Step 2 // ] // }, // "Phase 2": { // // Similar object structure for Phase 2 // } // }
此方法提供了一种灵活有效的方法来对对象进行分组数组。通过实现自定义 groupBy 函数,您可以控制分组逻辑,并可以轻松扩展它以处理更复杂的场景。
以上是如何使用自定义'groupBy”函数有效地对 JavaScript 数组中的对象进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!