博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d JS 源生js实现each方法
阅读量:6676 次
发布时间:2019-06-25

本文共 1908 字,大约阅读时间需要 6 分钟。

 

出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48

jquery里面有个each方法,将循环操作简化、便捷。

随后es出了个forEach方法,两个虽然用法相近,但是不能处理对象类型。且无法通过return true达到continue效果。

此外还有个every方法,该方法虽然可以实现continue效果,但是在处理类数组与对象类型时,完全无用。

 

在不使用jquery的each方法时,该如何处理;或者说用原生如何来实现?我在GridManager.js中集成了该方法,代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 通过字面量方式实现的函数each
var 
each =  
function
(object, callback){
  
var 
type = (
function
(){
          
switch 
(object.constructor){
            
case 
Object:
                
return 
'Object'
;
                
break
;
            
case 
Array:
                
return 
'Array'
;
                
break
;
            
case 
NodeList:
                
return 
'NodeList'
;
                
break
;
            
default
:
                
return 
'null'
;
                
break
;
        
}
    
})();
    
// 为数组或类数组时, 返回: index, value
    
if
(type === 
'Array' 
|| type === 
'NodeList'
){
        
// 由于存在类数组NodeList, 所以不能直接调用every方法
        
[].every.call(object, 
function
(v, i){
            
return 
callback.call(v, i, v) === 
false 
false 
true
;
        
});
    
}
    
// 为对象格式时,返回:key, value
    
else 
if
(type === 
'Object'
){
        
for
(
var 
in 
object){
            
if
(callback.call(object[i], i, object[i]) === 
false
){
                
break
;
            
}
        
}
    
}
}

 

我们来try一下, 测试下数组、对象、类数组类型及中断效果

数组类型:

 

1
2
3
4
var 
_array = [1,2,3,4];
each(_array, 
function
(i, v){
  
console.log(i + 
': ' 
+ v);
});

输出如下:

 

对象类型:

 

1
2
3
4
var 
object = {a:1, b:2, c:3}
each(object, 
function
(i, v){
  
console.log(i + 
': ' 
+ v);
});

输出如下:

 

类数组类型 :

 

1
2
3
4
var 
ele = document.querySelectorAll(
'div'
);
each(ele, 
function
(i, v){
  
console.log(i + 
': ' 
+ v);
});

输出如下:

 

增加中断条件:

 

1
2
3
4
5
6
7
8
9
10
11
12
var 
object2 = {name:
'baukh'
, age: 
'29'
, six:
'男'
, url: 
'www.lovejavascript.com'
,}
each(object2, 
function
(i, v){
  
if
(i === 
'age'
){ 
//如果存在键值为age的属性时,则输出警告,用于实现continue效果
    
console.log(
'存在键值为age,这家伙已经'
+v+
'岁了'
);
    
return 
true
;
  
}
  
if
(i === 
'six' 
&& v === 
'男'
){
//如果存在键值为age的属性时,则输出跳出,用于实现break效果
    
console.log(
'存在键值为six,是个男的,不用关注了~'
);
    
return 
false
;
  
}
  
console.log(i + 
': ' 
+ v);
});

输出如下:

从结果可以看出来,each方法已经实现了jquery的each功能。且实现如此简单~

转载于:https://www.cnblogs.com/luorende/p/6998105.html

你可能感兴趣的文章
OC中类的属性与成员变量的区别
查看>>
SMTP命令邮件投递(无身份认证)
查看>>
Nginx + MySQL + PHP + Xcache + Memcached
查看>>
使用Windows live movie maker轻松与朋友分享视频
查看>>
我的友情链接
查看>>
数据库死锁的类型
查看>>
找水王
查看>>
grep及正则表达式
查看>>
MongoDB常用命令大全
查看>>
Python程序的执行过程
查看>>
Proxmox-VE搭配Ceph存储组建高可用虚拟化平台
查看>>
前端基础---JavaScript
查看>>
Linux关于大于2T的磁盘分区格式化
查看>>
lamp系列-MySQL主从复制原理视频(老男孩出品)
查看>>
堆和栈的区别
查看>>
Android 编辑框(EditText)属性学习
查看>>
【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
查看>>
部分3G网卡连接Cisco ***后不能访问内网资源
查看>>
JavaScript 核心知识点
查看>>
Beta阶段——Scrum 冲刺博客第二天
查看>>