JavaScript新手求助:如何将对象数组按字符串数组均分并添加对应属性?
实现对象数组按指定数组数量均分并添加对应属性
我是JavaScript新手,希望实现以下效果:现有字符串数组
const bikes = ["honda","kawasaki","suzuki"],以及对象数组const mainObject =[ { name:"john", age:"23"}, { name:"Max", age:"26"}, { name:"Tim", age:"28"}, { name:"Jim", age:"28"}, { name:"Jacob", age:"28"}, { name:"Luke", age:"28"} ],需要将mainObject按bikes的数量均分成若干部分,为每部分的对象添加对应的bike属性;若bikes元素增加,则自动重新均分分配。预期结果为:const mainObject =[ { name:"john", age:"23",bike:"honda"}, { name:"Max", age:"26",bike:"honda"}, { name:"Tim", age:"28",bike:"kawasaki"}, { name:"Jim", age:"28",bike:"kawasaki"}, { name:"Jacob", age:"28",bike:"suzuki"}, { name:"Luke", age:"28", bike:"suzuki"} ]
实现思路
- 先算清楚每个品牌要分配的基础用户数:用用户对象总数除以品牌数量,得到基础分配数;如果总数不能被品牌数整除,前几个品牌会多分到1个用户
- 遍历用户对象数组,根据每个对象的索引位置判断所属品牌分组,给对象添加对应的
bike属性
代码实现
const bikes = ["honda","kawasaki","suzuki"]; const mainObject =[ { name:"john", age:"23"}, { name:"Max", age:"26"}, { name:"Tim", age:"28"}, { name:"Jim", age:"28"}, { name:"Jacob", age:"28"}, { name:"Luke", age:"28"} ]; // 计算基础分配数和剩余未分配的对象数 const totalUsers = mainObject.length; const brandCount = bikes.length; const basePerBrand = Math.floor(totalUsers / brandCount); const extraUsers = totalUsers % brandCount; // 给每个用户对象添加对应的bike属性 const updatedUsers = mainObject.map((user, index) => { let brandIndex; // 前extraUsers个品牌,每个多分配1个用户 if (index < extraUsers * (basePerBrand + 1)) { brandIndex = Math.floor(index / (basePerBrand + 1)); } else { // 剩下的品牌按基础数分配 brandIndex = extraUsers + Math.floor((index - extraUsers * (basePerBrand + 1)) / basePerBrand); } // 返回新对象,不修改原数组 return { ...user, bike: bikes[brandIndex] }; }); console.log(updatedUsers);
代码说明
- 不修改原数据:用
map方法生成新数组,原mainObject不会被改动,避免误操作原数据 - 自动适配品牌数量变化:不管
bikes数组新增或减少品牌,代码都会自动重新计算分配规则,无需手动调整逻辑 - 兼容非整除场景:如果用户总数和品牌数不是整数倍关系,会自动让前几个品牌多分配1个用户,保证分配尽可能均匀
内容的提问来源于stack exchange,提问作者Cleo Pereira
相关产品推荐
相关产品推荐

