首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:限制索引周围的数组

Javascript:限制索引周围的数组
EN

Stack Overflow用户
提问于 2020-12-02 08:46:11
回答 2查看 43关注 0票数 0

我有一个用户上传的视频数组,我想限制其长度。但是,我希望将视频限制为反映当前视频的位置,而不是仅从数组的开头或结尾删除视频。例如:

如果该视频是上传者上传的第一个超过100个视频的视频

代码语言:javascript
复制
* The video
- The 99 next videos

如果该视频是上传者上传的第200个视频,有1300个视频

代码语言:javascript
复制
- Videos 150-199
* The video (video 200)
- Videos 201-250

如果该视频是上传者上传的第70个视频,有100个视频

代码语言:javascript
复制
- Videos 1-69
* The video (video 70)
- Videos 71-100

如果该视频是有300个视频的上传者上传的最后一个视频

代码语言:javascript
复制
- Videos 200-299
* The video (video 300)

我当前的代码并不能完全正确地做到这一点。假设有300个视频,如果视频在开头,我会返回1-100个视频,但如果视频在结尾,我会返回250-300个视频,而不是200-300个。

代码语言:javascript
复制
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);
};

我如何修复我的代码来以这种方式限制视频?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-02 09:17:24

代码语言:javascript
复制
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末尾时进行处理

票数 0
EN

Stack Overflow用户

发布于 2020-12-02 09:23:43

你看如果最小值小于0或者最大值超出了限制长度,你不能得到length‘videoList’的返回值,应该考虑这些边缘条件,请尝试这样做:

代码语言:javascript
复制
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);   
}

如果还有问题,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65100657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档