如何按indexofitem字段值将对象数组拆分为多个子数组?
通用数组分组实现方案
刚好之前做过类似的需求,用JavaScript的Array.prototype.reduce()就能轻松实现这个通用的按指定键分组的功能,完全不用局限于indexofitem的特定值,下面直接上代码和解释:
代码实现
// 你的原始数组 const originalArray = [ {indexofitem: 0, indexofchild_1: 0, name: "dfds", setName: "SET A", quantity: 2, price: 500}, {indexofitem: 0, indexofchild_1: 1, name: "bvcxvb", setName: "SET B", quantity: 2, price: 500}, {indexofitem: 0, indexofchild_1: 2, name: "vcx", setName: "SET C", quantity: 2, price: 500}, {indexofitem: 1, indexofchild_1: 3, name: "vxc", setName: "SET A", quantity: 1, price: 500}, {indexofitem: 1, indexofchild_1: 4, name: "vcx", setName: "SET B", quantity: 1, price: 500}, {indexofitem: 1, indexofchild_1: 5, name: "cxvxz", setName: "SET C", quantity: 2, price: 500} ]; // 通用分组函数:接收数组和分组键名,返回分组后的结构 function groupBy(arr, groupKey) { return arr.reduce((groupedResult, currentItem) => { // 获取当前项的分组键值 const keyValue = currentItem[groupKey]; // 如果当前分组不存在,初始化一个空数组 if (!groupedResult[keyValue]) { groupedResult[keyValue] = []; } // 将当前项推入对应分组 groupedResult[keyValue].push(currentItem); return groupedResult; }, {}); // 初始值为空白对象,用于存储所有分组 } // 按indexofitem分组 const groupedData = groupBy(originalArray, 'indexofitem'); // 如果你需要得到「数组的数组」形式(而非键值对对象),可以转换一下 const groupedArrays = Object.values(groupedData); // 输出结果看看 console.log(groupedArrays);
功能说明
- 这个
groupBy函数是完全通用的:不仅可以按indexofitem分组,传入任何其他键名(比如setName)都能实现对应的分组逻辑; - 最终的
groupedArrays就是你要的结果:每个子数组对应一组相同indexofitem值的对象,不管indexofitem是0、1还是其他任何值,都能自动分组; - 如果保留
groupedData的对象形式,还可以通过键名快速访问对应分组(比如groupedData[0]直接拿到indexofitem为0的所有元素)。
内容的提问来源于stack exchange,提问作者user8232211
相关产品推荐
相关产品推荐

