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

如何修改函数实现从数组返回5个尽可能等间距的有序元素?

解决方案

原函数的问题在于步长计算方式不合理,当数组长度为8或9时,Math.floor(array.length / 5)得到的步长为1,导致直接取前5个元素,无法实现等间距分布。要解决这个问题,我们需要从数组首尾两端开始,均匀选取中间元素,确保结果的索引在原数组中尽可能均匀分布,同时保持原顺序。

修改后的函数代码

function getEquallySpacedItems(array) {
  const targetCount = 5;
  // 数组长度小于等于目标数量时直接返回副本
  if (array.length <= targetCount) {
    return [...array];
  }

  const result = [];
  // 计算每个选取位置的间隔系数:(总长度-1)/(目标数量-1),保证首尾都被选中
  const step = (array.length - 1) / (targetCount - 1);
  
  for (let i = 0; i < targetCount; i++) {
    // 计算当前元素的索引,用四舍五入保证最接近均匀分布的位置
    const index = Math.round(step * i);
    result.push(array[index]);
  }
  
  return result;
}

效果验证

  • 当数组长度为8时(索引0-7):
    计算得到的索引为0,2,4,5,7,结果数组保持原顺序,间隔尽可能均匀。
  • 当数组长度为9时(索引0-8):
    计算得到的索引为0,2,4,6,8,实现完美的等间距分布。
  • 当数组长度为10时(索引0-9):
    索引为0,2,5,7,9,间隔均匀且覆盖首尾。

核心思路

  1. 固定选中数组的第一个和最后一个元素,保证结果覆盖整个时间范围(对应预约场景的首尾时段)。
  2. 通过(数组长度-1)/(目标数量-1)计算均匀分布的间隔系数,确保中间元素的位置尽可能平均。
  3. 用Math.round()将计算出的浮点索引转换为最接近的整数索引,保证选取的元素在原数组中位置最优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:28:16