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

求助:JavaScript实现两个数组元素均匀分布的函数

实现数组元素的均匀插入并生成指定格式的结果

需要编写一个distribute函数,将数组b的元素均匀插入数组a中,最终输出的数组需符合给定示例的格式。示例如下:

let a = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
let b = [0,0,0,0]

function distribute(a, b){
  // 需要实现这里的逻辑
  return ?
}

let distributed = distribute(a, b)

console.log(distributed)
// 期望输出: [0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1]

// 注:原示例中的长度判断存在笔误,实际期望应为:
// console.log(distributed.length === a.length + b.length)

实现思路

核心是将数组a分割为与b长度相等的段,把b的每个元素依次放在对应段的a元素前,最后拼接所有片段。若a的长度无法被b的长度整除,剩余元素会优先分配到前面的段,保证分布尽可能均匀。

代码实现

function distribute(a, b) {
  const result = [];
  const segmentCount = b.length;
  // 计算每段的基础元素数量
  const baseSegmentSize = Math.floor(a.length / segmentCount);
  // 记录无法均分的剩余元素数量
  let remainingElements = a.length % segmentCount;
  
  let startIndex = 0;
  
  for (let i = 0; i < segmentCount; i++) {
    // 当前段的实际长度:基础长度 + 若有剩余则多分配1个元素
    const currentSegmentSize = baseSegmentSize + (remainingElements > 0 ? 1 : 0);
    // 插入b的当前元素
    result.push(b[i]);
    // 插入a中对应段的元素
    result.push(...a.slice(startIndex, startIndex + currentSegmentSize));
    // 更新下一段的起始索引
    startIndex += currentSegmentSize;
    // 剩余元素分配后递减
    if (remainingElements > 0) remainingElements--;
  }
  
  return result;
}

验证示例

用给定的测试数据运行:

let a = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
let b = [0,0,0,0]

let distributed = distribute(a, b)
console.log(distributed)
// 输出: [0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1]
console.log(distributed.length === a.length + b.length) // true

非整除场景处理

如果a的长度无法被b均分,比如a = [1,1,1,1,1,1,1],b = [0,0],函数会将剩余的1个元素分配到第一段,输出结果为[0,1,1,1,1,0,1,1,1],确保插入元素的分布尽可能均匀。

内容的提问来源于stack exchange,提问作者jaap klaas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:21:28