我有一个用户上传的视频数组,我想限制其长度。但是,我希望将视频限制为反映当前视频的位置,而不是仅从数组的开头或结尾删除视频。例如:
如果该视频是上传者上传的第一个超过100个视频的视频
* The video
- The 99 next videos如果该视频是上传者上传的第200个视频,有1300个视频
- Videos 150-199
* The video (video 200)
- Videos 201-250如果该视频是上传者上传的第70个视频,有100个视频
- Videos 1-69
* The video (video 70)
- Videos 71-100如果该视频是有300个视频的上传者上传的最后一个视频
- Videos 200-299
* The video (video 300)我当前的代码并不能完全正确地做到这一点。假设有300个视频,如果视频在开头,我会返回1-100个视频,但如果视频在结尾,我会返回250-300个视频,而不是200-300个。
export const limitVideos = (videosList, index, limit = 100) => {
let least = index - Math.floor(limit / 2);
least = (least < 0) ? 0 : least;
return videosList.slice(least, least + limit);
};我如何修复我的代码来以这种方式限制视频?
发布于 2020-12-02 09:17:24
export const limitVideos = (videosList, index, limit = 3) => {
let least = index - Math.floor(limit / 2);
let len = videosList.length
if(least + limit > len)
least = len - limit
least = (least < 0) ? 0 : least;
return videosList.slice(least, least + limit);
};返回结果250,300而不是200,300的原因是,正如您所知道的,最小值被设置为250,所以我添加了if-state,用于在索引位于videosList末尾时进行处理
发布于 2020-12-02 09:23:43
你看如果最小值小于0或者最大值超出了限制长度,你不能得到length‘videoList’的返回值,应该考虑这些边缘条件,请尝试这样做:
export const limitVideos = (videosList, index, limit = 100) => {
const maxIndex = videosList.length - 1
if(index > maxIndex || index < 0) {
return false
}
if(videosList.length <= limit) {
return videosList
}
let least = index - Math.floor(limit / 2);
let max;
if(least < 0) {
max = limit - 1;
least = 0;
} else {
if(least + limit - 1 > maxIndex) {
max = maxIndex
least = least - (least + limit - 1 - maxIndex)
} else {
max = least + limit - 1;
least = least
}
}
return videosList.slice(least, max + 1);
}如果还有问题,请告诉我
https://stackoverflow.com/questions/65100657
复制相似问题