Javascript 角滤波器中常规环路和拼接的区别?

Javascript 角滤波器中常规环路和拼接的区别?,javascript,angularjs,arrays,angularjs-filter,Javascript,Angularjs,Arrays,Angularjs Filter,下面是我在引导分页中使用的一个角度过滤器中的代码片段 //first statement let ret = []; for (let i = from; i < limit + from; i++) { if (typeof items[i] !== typeof undefined) { ret.push(items[i]); } } //second statement ret = items.splice(from, limit); //第一条语句 设ret=

下面是我在引导分页中使用的一个角度过滤器中的代码片段

//first statement
let ret = [];

for (let i = from; i < limit + from; i++) {
  if (typeof items[i] !== typeof undefined) {
    ret.push(items[i]);
  }
}

//second statement
ret = items.splice(from, limit);
//第一条语句
设ret=[];
for(设i=from;i
使用第一条语句可以正常工作,没有任何错误,而第二条语句会导致无限摘要循环。 有什么区别

编辑:以下完整代码(根据T.J.Crowder的要求)

过滤器('limitMe',函数(){
返回函数(项目、限制、来源){
如果(
项目类型==未定义的项目类型||
typeof limit==未定义的typeof||
typeof from==未定义的typeof
){
退货项目;
}
设len=items.length;
如果(len==0){
退货项目;
}
如果(限制>长度){
极限=len;
from=0;
}否则如果(len
这两个代码示例执行完全不同的操作:

  • 第一个将范围
    限制+从
    的非
    未定义
    、非缺失条目复制到
    ret
    ,并将它们保留在
    项中

  • 第二个选项从
    项目中删除条目
    ,并将其放入
    ret
    (即使这些条目未定义或缺失)

因此,在第一次之后,
仍然包含条目。第二次之后,它就不会了

另外,如果项目在范围内,第二个将从
项目
中获取
未定义的
条目,而第二个将跳过这些条目


如果你发布了一篇文章,我们可能会帮助你理解为什么它们会形成一个无限摘要循环,但是它们是非常重要的区别(特别是第一个),所以…

也许这可以用于items.filter((item)=>{return item!==typeof undefined}).splice(from,limit);谢谢@InferOn我现在就来试试为我的第一个答案道歉,我读了
slice
其中代码清楚地使用了
splice
@InferOn添加过滤器起作用了,但为什么?为什么一个简单的拼接会导致无限摘要循环和一个过滤器,然后再修复它?你如何使用你的过滤器?你能加一块标记吗?
     filter('limitMe',function () {
        return function (items,limit, from) {
            if(
                typeof items == typeof undefined ||
                typeof limit == typeof undefined ||
                typeof from == typeof undefined
            ){
                return items;
            }
            let len = items.length;
            if(len == 0){
                return items;
            }
            if(limit > len){
                limit = len;
                from = 0;
            }else if(len < from + limit){
                limit = len - from;
            }
            let ret = [];
            for(let i = from; i < limit + from; i++){
                if(typeof items[i] !== typeof undefined){
                    ret.push(items[i])
                }
            }
            /*return items.filter(function (row) {
                return typeof row !== typeof undefined;
            }).splice(from, limit);*/
            return ret;
        }
    })