下面是我使用的一个角度过滤器中的代码片段,我正在使用自举分页。
//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;
}
})
答案 0 :(得分:0)
这两个代码示例完全不同:
undefined
到from
范围内limit + from
的第一个副本非ret
个非缺失条目将它们留在items
。
第二个从items
中移除条目并将其放入ret
(即使这些条目为undefined
或遗失)。
所以在第一个之后,items
仍然有条目。在第二次之后,它没有。
另外,第二个将从undefined
获取items
条目,如果它们在范围内,而第二个将跳过它们。
如果您发布了MCVE,我们可以帮助您理解为什么这些会为无限的摘要循环做出贡献,但它们是相当大的差异(特别是第一个),所以......