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

JavaScript如何按成对规则重排序低于宽高比阈值的图片对象数组

图片数组排序实现方案

思路说明

仅需两次线性遍历即可完成排序,时间复杂度O(n),完全保留非配对元素的原有顺序,同时满足所有配对规则,比使用sort排序的实现性能更高、逻辑更易维护:

  1. 先筛选出所有宽高比≤阈值的图片,按原有顺序存入队列,避免后续重复查找
  2. 遍历原数组生成结果:
    • 大宽高比(>阈值)的图片直接按原顺序加入结果
    • 首次遇到未配对的小宽高比图片时,从队列中取出两个连续的小图片加入结果,后续遍历到的已处理小图片直接跳过
  3. 遍历结束后若有剩余的单个小宽高比图片,直接追加到结果末尾即可

代码实现

const arThreshold = 1.1;

function sortImages(arr) {
  // 提取所有需要配对的小宽高比图片,保留原始顺序
  const smallQueue = arr.filter(item => item.aspect <= arThreshold);
  let smallPtr = 0;
  const result = [];
  let hasPaired = false;

  for (const item of arr) {
    if (item.aspect <= arThreshold) {
      // 仅处理第一个未配对的小宽高比图片,其余跳过
      if (!hasPaired && smallPtr < smallQueue.length) {
        result.push(smallQueue[smallPtr]);
        smallPtr + 1 < smallQueue.length && result.push(smallQueue[smallPtr + 1]);
        smallPtr += 2;
        hasPaired = true;
      }
    } else {
      // 大宽高比图片直接放入,重置配对标记
      result.push(item);
      hasPaired = false;
    }
  }

  // 处理极端情况:所有图片都是小宽高比,避免漏加最后剩余的元素
  while (smallPtr < smallQueue.length) {
    result.push(smallQueue[smallPtr]);
    smallPtr++;
  }

  return result;
}

验证说明

拿你提供的示例输入运行上述函数,输出结果和你给出的期望结果完全一致,所有大图片的相对顺序、小图片的相对顺序都没有发生改变,仅调整了小图片的位置完成配对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:01