Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bc02d82

Browse files
committed
try
1 parent eb13a47 commit bc02d82

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

Iterator/Iterator.html

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<script type="text/javascript" src='jquery-1.8.2.min.js'></script>
2+
<script type="text/javascript">
3+
$.each([1,2,3],function(i,n){
4+
console.log('当前下标为:' + i);
5+
console.log('当前值为:' + n);
6+
});
7+
8+
var each = function(ary,callback){
9+
for(var i= 0,l=ary.length;i<l;i++){
10+
callback.call(ary[i],i,ary[i]); // 把下标和元素当作参数传给callback 函数
11+
}
12+
};
13+
14+
each([1,2,3,4],function(i,n){
15+
alert([i,n]);
16+
});
17+
18+
var compare = function(ary1,ary2){
19+
if(ary1.length !== ary2.length){
20+
throw new Error('ary1 和ary2 不相等');
21+
}
22+
each(ary1,function(i,n){
23+
if(n !== ary2[i]){
24+
throw new Error('ary1 和ary2 不相等');
25+
}
26+
});
27+
alert('ary1 和ary2 相等!');
28+
}
29+
30+
compare([1,2,3],[1,2,4]); // throw new Error ( 'ary1 和ary2 不相等' );
31+
32+
var Iterator = function(obj){
33+
var current = 0;
34+
var next = function(){
35+
current += 1;
36+
};
37+
var isDone = function(){
38+
return current >= obj.length;
39+
};
40+
var getCurrItem = function(){
41+
return obj[current];
42+
};
43+
return {
44+
next:next,
45+
isDone:isDone,
46+
getCurrItem:getCurrItem
47+
}
48+
};
49+
50+
//再看看如何改写compare 函数:
51+
var compare1 = function(iterator1,iterator2){
52+
while(iterator1.isDone() && iterator2.isDone()){
53+
if(iterator1.getCurrItem() !== iterator2.getCurrItem()){
54+
throw new Error('ary1 和ary2 不相等');
55+
}
56+
iterator1.next();
57+
iterator2.next();
58+
}
59+
alert('iterator1 和iterator2 相等.');
60+
}
61+
var iterator1 = Iterator([1,2,3]);
62+
var iterator2 = Iterator([1,2,3]);
63+
compare1(iterator1,iterator2); // 输出:iterator1 和iterator2 相等
64+
65+
$.each = function(obj,callback){
66+
var value,
67+
i = 0,
68+
length = obj.length,
69+
isArray = isArraylike(obj);
70+
if(isArray){ // 迭代类数组
71+
for(;i<length;i++){
72+
value = callback.call(obj[i],i,obj[i]);
73+
if(value === false){
74+
break;
75+
}
76+
}
77+
}else{
78+
for(i in obj){ // 迭代object 对象
79+
value = callback.call(obj[i],i,obj[i]);
80+
if(value === false){
81+
break;
82+
}
83+
}
84+
}
85+
return obj;
86+
};
87+
88+
var reverseEach = function(ary,callback){
89+
for(var l = ary.length-1;l>=0;l--){
90+
callback(l,ary[l]);
91+
}
92+
};
93+
94+
reverseEach([0,1,2],function(i,n){
95+
console.log(n); // 分别输出:2, 1 ,0
96+
});
97+
98+
var each1 = function(ary,callback){
99+
for(var i = 0,l = ary.length;i<l;i++){
100+
if(callback(i,ary[i]) === false){ // callback 的执行结果返回false,提前终止迭代
101+
break;
102+
}
103+
}
104+
};
105+
106+
each1([1,2,3,4,5],function(i,n){
107+
if(n>3){ // n 大于3 的时候终止循环
108+
return false;
109+
}
110+
console.log(n); // 分别输出:1, 2, 3
111+
});
112+
</script>

Iterator/jquery-1.8.2.min.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)