You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成由给定对象按指定数量组合的长度为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:20:37