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