我有一組檔案,并且希望根據檢測到的螢屏寬度僅顯示一個檔案。我在嘗試遍歷并檢查陣列中的當前項和下一項時遇到問題。
以下是一些要求:
- 如果
viewportWidth是大于或等于最大的視頻寬度,然后選擇最大的視頻。 - 如果
viewportWidth是小于或等于最小視頻的寬度,然后選擇最小的視頻 - 否則,遍歷陣列,如果
viewportWidth是比目前的專案規模較小,但比下一個更大的,然后選擇視頻。
這是我當前的代碼,但我似乎無法正確處理回圈/條件部分:
const viewportWidth = 1800;
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) {
if (viewportWidth > videos[0].width) {
return videos[0].url;
}
if (viewportWidth < videos[videos.length - 1].width) {
return videos[videos.length - 1].url;
} else {
let i = 0;
while (viewportWidth < videos[i].width && viewportWidth > videos[i 1].width) {
i
}
return videos[i].url;
}
}
const videoUrl = getVideoUrl(viewportWidth);
console.log(videoUrl);
基于以上:
viewWidth = 1200 // should output video2.mp4
viewWidth = 2000 // should output video1.mp4
vewWidth = 300 // should output video5.mp4
uj5u.com熱心網友回復:
你的做法是方式太復雜,恕我直言:-)
只需以相反的順序回圈播放視頻,一旦發現寬度大于(-等于)視口寬度的視頻,就回傳該視頻。
如果你沒有找到,那么只需在回圈之后回傳第一個。
function getVideoUrl(viewportWidth) {
for (let i = videos.length-1; i >= 0 ; --i) {
if (videos[i].width >= viewportWidth) {
return videos[i];
}
}
return videos[0];
}
uj5u.com熱心網友回復:
在這個例子中, else 中的 while 將始終被執行并始終回傳第二個視頻。
盡量保持它的愚蠢簡單代替
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347627.html
標籤:javascript 数组 循环
下一篇:obj的格式化陣列
