手写迭代器
- 内部迭代器
var each = function (ary, fn) {
for (var i = 0; i < ary.length; i++) {
fn.call(ary, ary[i], i);
}
};
var ary = ['a', 'b', 'c', 'd', 'e', 'f'];
var fn = function (item, index) {
console.log(item, index);
};
each(ary, fn);
- 外部迭代器
var Iterator = function (obj) {
var current = 0;
var next = function () {
return (current += 1);
};
var isDone = function () {
return current >= obj.length;
};
var getCurrentItem = function () {
return obj[current];
};
return {
next,
isDone,
getCurrentItem,
length: obj.length
};
};
/**
* **********测试代码****************
*/
var ary1 = [2, 3, 4];
var ary2 = [2, 3, 4];
var iter1 = Iterator(ary1);
var iter2 = Iterator(ary2);
var compare = function (iter1, iter2) {
if (iter1.length !== iter2.length) {
throw new Error('不相等');
}
while (!iter1.isDone() && !iter2.isDone()) {
if (iter1.getCurrentItem() !== iter2.getCurrentItem()) {
throw new Error('不相等');
}
iter1.next();
iter2.next();
}
console.log('相等');
};
compare(iter1, iter2);