如何生成由给定对象按指定数量组合的长度为10的数组集合
生成符合指定规律的长度为10的数组组合
问题描述
现有对象数组:
const obj = [ {name: "obj1"}, {name: "obj2"}, {name: "obj3"} ];
需要生成所有长度为10的数组组合,规律为:
- 第一个数组是10个
obj1 - 第二个数组是9个
obj1+ 1个obj2 - 第三个数组是8个
obj1+ 2个obj2 - ...以此类推,直到覆盖所有非负整数组合满足
obj1数量 + obj2数量 + obj3数量 = 10的情况(包括0个obj1后,obj2和obj3的各种数量组合)
实现思路
核心是遍历所有满足count1 + count2 + count3 = 10的非负整数三元组,再根据每个三元组的数量,重复对应对象并拼接成目标数组。
代码实现(JavaScript)
const obj = [ {name: "obj1"}, {name: "obj2"}, {name: "obj3"} ]; const targetLength = 10; const result = []; // 遍历obj1的可能数量:从10递减到0 for (let count1 = targetLength; count1 >= 0; count1--) { // 遍历obj2的可能数量:从剩余长度递减到0 for (let count2 = targetLength - count1; count2 >= 0; count2--) { const count3 = targetLength - count1 - count2; // 生成当前组合的数组 const currentArr = [ ...Array(count1).fill(obj[0]), ...Array(count2).fill(obj[1]), ...Array(count3).fill(obj[2]) ]; result.push(currentArr); } } // 可选:输出验证 result.forEach((arr, index) => { console.log(`arr${index + 1} =`, arr); });
代码说明
- 外层循环控制
obj1的数量,从10递减到0,确保生成顺序符合需求示例的优先级 - 内层循环控制
obj2的数量,剩余长度由总长度减去obj1的数量得到,obj3的数量自动计算得出 - 用
Array.fill()快速生成对应数量的对象数组,再通过扩展运算符拼接成完整的目标数组 - 所有生成的组合会被存入
result数组,可直接使用
内容的提问来源于stack exchange,提问作者angrycreon
相关产品推荐
相关产品推荐

