角度滤波器中常规环和拼接之间的区别?

时间:2017-06-23 08:17:53

标签: 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);

使用第一个语句按预期工作而没有任何错误,而第二个语句导致无限的摘要循环。 有什么区别?

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

     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;
        }
    })

1 个答案:

答案 0 :(得分:0)

这两个代码示例完全不同:

  • undefinedfrom范围内limit + from的第一个副本ret个非缺失条目将它们留在items

  • 第二个items中移除条目并将其放入ret(即使这些条目为undefined或遗失)。

所以在第一个之后,items仍然有条目。在第二次之后,它没有。

另外,第二个将从undefined获取items条目,如果它们在范围内,而第二个将跳过它们。

如果您发布了MCVE,我们可以帮助您理解为什么这些会为无限的摘要循环做出贡献,但它们是相当大的差异(特别是第一个),所以......