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

如何遍历视频数组按多条件匹配视口宽度筛选适配视频资源

适配屏幕宽度的视频选择逻辑修正

修正后完整代码

const videos = [{
    url: 'video1.mp4',
    width: 1920
  },
  {
    url: 'video2.mp4',
    width: 1280
  },
  {
    url: 'video3.mp4',
    width: 720
  },
  {
    url: 'video4.mp4',
    width: 560
  },
  {
    url: 'video5.mp4',
    width: 420
  },
];

function getVideoUrl(viewportWidth) {
  // 提前校验数组按宽度降序排序,避免顺序混乱导致逻辑错误
  const sortedVideos = [...videos].sort((a, b) => b.width - a.width);
  const maxWidth = sortedVideos[0].width;
  const minWidth = sortedVideos.at(-1).width;

  // 边界判断匹配需求,使用>=、<=
  if (viewportWidth >= maxWidth) {
    return sortedVideos[0].url;
  }
  if (viewportWidth <= minWidth) {
    return sortedVideos.at(-1).url;
  }

  // 中间区间遍历逻辑修正
  for (let i = 0; i < sortedVideos.length - 1; i++) {
    const currentWidth = sortedVideos[i].width;
    const nextWidth = sortedVideos[i + 1].width;
    if (viewportWidth < currentWidth && viewportWidth > nextWidth) {
      return sortedVideos[i].url;
    }
  }

  // 兜底逻辑,避免边界遗漏
  return sortedVideos[0].url;
}

// 测试用例
console.log(getVideoUrl(1200)); // 输出 video2.mp4
console.log(getVideoUrl(2000)); // 输出 video1.mp4
console.log(getVideoUrl(300)); // 输出 video5.mp4
console.log(getVideoUrl(1800)); // 输出 video1.mp4

具体修改点

  • 边界判断符号修正:将原代码的>、<替换为>=、<=,匹配需求中大于等于最大宽度、小于等于最小宽度的判定规则
  • 循环逻辑重构:原while循环条件逻辑完全倒置,改为遍历数组逐一校验当前项与下一项宽度的区间匹配规则,同时避免i+1数组越界问题
  • 增加排序校验:提前对视频数组按宽度降序排序,避免数组顺序调整后逻辑失效
  • 增加兜底逻辑:避免极端边界场景无返回值的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:03