使用频率 | 非常高 |
复杂程度 | 中低 |
成员类型 | 静态函数 |
Std.each方法用于遍历一个数组的每个元素,对象的每个键,或者是对一个字符串进行拆分进行遍历.
Std.each方法在遍历过程中,每找到一个元素,都会执行一次回调函数.
Std.each方法在大多数情况下都可以直接替代for,for in
Std.each(Array data,Function callback,Boolean makeReturn = false,String split = ' ');
Std.each(Object data,Function callback,Boolean makeReturn = false,String split = ' ');
Std.each(String data,Function callback,Boolean makeReturn = false,String split = ' ');
名称 | 类型 | 描述 | ||||||
data | Array,Object,String |
需要进行遍历的数据,一个数组,对象,或者字符串
注意:在遍历一个object的时候,Std.each方法并没有做hasOwnProperty检查,如果遍历的是一个特殊对象,需要在回调函数中手动做hasOwnProperty检查,
否则会一直遍历到原型链上
|
||||||
callback | Function |
遍历时候每找到一个元素都需要执行的回调函数 this对象:data本身,如果传递的是一个数组,那么this对象就是这个数组本身 参数:
|
||||||
makeReturn | Boolean |
该参数决定了Std.each方法的返回值,当为true的时候,Std.each方法会根据回调函数中的返回值进行组合. 例如遍历的是一个字符串或者数组,回调函数中的返回值如果为非undefined的值,那么Std.each方法就会把该值放入一个数组中, 待遍历完毕之后作为Std.each的返回值返回.如果遍历的是一个对象,回调函数中的返回值为非undefined的值时,Std.each方法就会将当前返回值作为键值, 根据当前键名写入一个Object对象中,当Std.each执行完毕的时候,该Object就会作为返回值返回. 当该参数为false的时候,如果回调函数中的返回值为非undefined的值的时候,Std.each方法将会停止遍历,并且将该返回值作为Std.each的返回值返回. |
||||||
split | String | 如果当遍历的值为字符串的时候,该字符串将会被分割成数组,而split参数决定了以哪种字符作为分割条件,split参数默认为空格,如果遍历的值不是字符串,那么该参数将会毫无意义. |
/*
* 遍历一个数组
* 最终输出
* 0,1
* 1,2
* 2,3
*/
Std.each([1,2,3],function(index,value){
console.log(index + "," + value)
});
//遍历一个字符串
Std.each("a b c",function(index,value){
console.log(index + "," + value);
});
//第四个参数使用 "," 作为分割符遍历字符串
Std.each("a,b,c",function(index,value){
console.log(index + "," + value);
},false,",");
//相当于
Std.each(["a","b","c"],function(index,value){
console.log(index + "," + value);
});
/*
* 最终输出
* 0,"a"
* 1,"b"
* 2,"c"
*/
var data = {
a:1,
b:2,
c:3
}
//遍历一个object
Std.each(data,function(name,value){
console.log(name + "," + value);
});
/*
* 最终输出
* "a",1
* "b",2
* "c",3
*/
//遍历一个数组(当然:也可以是一个字符串,或object,用法都一样的)
var result = Std.each(["a","b","c"],function(index,value){
if(index == 2){
return value;
}
});
/*
* 在遍历数组时候,当index 等于 2(也就是遍历到值b)的时候,返回了这个value.
* 因为return的不是undefined,所以遍历过程中止了.
* 最终,Std.each的返回值result 的值是 "c"
*/
//将第三个参数修改为true,就能得到一个结果组合
var result = Std.each([1,2,3],function(index,value){
return index + ":" + value;
},true);
/*
* Std.each返回值result的值为 ["0:1","1:2","2:3"]
*/
//现在把return 去掉,看看会得到什么呢?
var result = Std.each([1,2,3],function(index,value){
},true);
/*
* result的值为 [] ,一个空数组
* 如果没有return,就和return;是一样的,是一个undefined值,所以不会添加到结果组合里
*/
var data = {
a:1,
b:2,
c:3
}
//将第三个参数修改为true,就能得到一个结果组合
var result = Std.each(data,function(index,value){
return index + ":" + value;
},true);
/*
* Std.each返回值result的值为 {a:"a:1",b:"b:2",c:"c:2"}
*/
//现在把return 去掉,看看会得到什么呢?
var result = Std.each(data,function(index,value){
},true);
/*
* result的值为 {} ,一个空的Object
* 如果没有return,就和return;是一样的,是一个undefined值,所以不会添加到结果组合里
*/