📄 iter.js
字号:
var self = MochiKit.Iter; iterable = self.iter(iterable); var rval = []; try { while (true) { rval.push(iterable.next()); } } catch (e) { if (e != self.StopIteration) { throw e; } return rval; } // mozilla warnings aren't too bright return undefined; }, reduce: function (fn, iterable, /* optional */initial) { var i = 0; var x = initial; var self = MochiKit.Iter; iterable = self.iter(iterable); if (arguments.length < 3) { try { x = iterable.next(); } catch (e) { if (e == self.StopIteration) { e = new TypeError("reduce() of empty sequence with no initial value"); } throw e; } i++; } try { while (true) { x = fn(x, iterable.next()); } } catch (e) { if (e != self.StopIteration) { throw e; } } return x; }, range: function (/* [start,] stop[, step] */) { var start = 0; var stop = 0; var step = 1; if (arguments.length == 1) { stop = arguments[0]; } else if (arguments.length == 2) { start = arguments[0]; stop = arguments[1]; } else if (arguments.length == 3) { start = arguments[0]; stop = arguments[1]; step = arguments[2]; } else { throw new TypeError("range() takes 1, 2, or 3 arguments!"); } if (step === 0) { throw new TypeError("range() step must not be 0"); } return { next: function () { if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { throw MochiKit.Iter.StopIteration; } var rval = start; start += step; return rval; }, repr: function () { return "range(" + [start, stop, step].join(", ") + ")"; }, toString: MochiKit.Base.forwardCall("repr") }; }, sum: function (iterable, start/* = 0 */) { var x = start || 0; var self = MochiKit.Iter; iterable = self.iter(iterable); try { while (true) { x += iterable.next(); } } catch (e) { if (e != self.StopIteration) { throw e; } } return x; }, exhaust: function (iterable) { var self = MochiKit.Iter; iterable = self.iter(iterable); try { while (true) { iterable.next(); } } catch (e) { if (e != self.StopIteration) { throw e; } } }, forEach: function (iterable, func, /* optional */self) { var m = MochiKit.Base; if (arguments.length > 2) { func = m.bind(func, self); } // fast path for array if (m.isArrayLike(iterable)) { try { for (var i = 0; i < iterable.length; i++) { func(iterable[i]); } } catch (e) { if (e != MochiKit.Iter.StopIteration) { throw e; } } } else { self = MochiKit.Iter; self.exhaust(self.imap(func, iterable)); } }, every: function (iterable, func) { var self = MochiKit.Iter; try { self.ifilterfalse(func, iterable).next(); return false; } catch (e) { if (e != self.StopIteration) { throw e; } return true; } }, sorted: function (iterable, /* optional */cmp) { var rval = MochiKit.Iter.list(iterable); if (arguments.length == 1) { cmp = MochiKit.Base.compare; } rval.sort(cmp); return rval; }, reversed: function (iterable) { var rval = MochiKit.Iter.list(iterable); rval.reverse(); return rval; }, some: function (iterable, func) { var self = MochiKit.Iter; try { self.ifilter(func, iterable).next(); return true; } catch (e) { if (e != self.StopIteration) { throw e; } return false; } }, iextend: function (lst, iterable) { if (MochiKit.Base.isArrayLike(iterable)) { // fast-path for array-like for (var i = 0; i < iterable.length; i++) { lst.push(iterable[i]); } } else { var self = MochiKit.Iter; iterable = self.iter(iterable); try { while (true) { lst.push(iterable.next()); } } catch (e) { if (e != self.StopIteration) { throw e; } } } return lst; }, groupby: function(iterable, /* optional */ keyfunc) { var m = MochiKit.Base; var self = MochiKit.Iter; if (arguments.length < 2) { keyfunc = m.operator.identity; } iterable = self.iter(iterable); // shared var pk = undefined; var k = undefined; var v; function fetch() { v = iterable.next(); k = keyfunc(v); }; function eat() { var ret = v; v = undefined; return ret; }; var first = true; return { repr: function () { return "groupby(...)"; }, next: function() { // iterator-next // iterate until meet next group while (k == pk) { fetch(); if (first) { first = false; break; } } pk = k; return [k, { next: function() { // subiterator-next if (v == undefined) { // Is there something to eat? fetch(); } if (k != pk) { throw self.StopIteration; } return eat(); } }]; } }; }, groupby_as_array: function (iterable, /* optional */ keyfunc) { var m = MochiKit.Base; var self = MochiKit.Iter; if (arguments.length < 2) { keyfunc = m.operator.identity; } iterable = self.iter(iterable); var result = []; var first = true; var prev_key; while (true) { try { var value = iterable.next(); var key = keyfunc(value); } catch (e) { if (e == self.StopIteration) { break; } throw e; } if (first || key != prev_key) { var values = []; result.push([key, values]); } values.push(value); first = false; prev_key = key; } return result; }, arrayLikeIter: function (iterable) { var i = 0; return { repr: function () { return "arrayLikeIter(...)"; }, toString: MochiKit.Base.forwardCall("repr"), next: function () { if (i >= iterable.length) { throw MochiKit.Iter.StopIteration; } return iterable[i++]; } }; }, hasIterateNext: function (iterable) { return (iterable && typeof(iterable.iterateNext) == "function"); }, iterateNextIter: function (iterable) { return { repr: function () { return "iterateNextIter(...)"; }, toString: MochiKit.Base.forwardCall("repr"), next: function () { var rval = iterable.iterateNext(); if (rval === null || rval === undefined) { throw MochiKit.Iter.StopIteration; } return rval; } }; }});MochiKit.Iter.EXPORT_OK = [ "iteratorRegistry", "arrayLikeIter", "hasIterateNext", "iterateNextIter",];MochiKit.Iter.EXPORT = [ "StopIteration", "registerIteratorFactory", "iter", "count", "cycle", "repeat", "next", "izip", "ifilter", "ifilterfalse", "islice", "imap", "applymap", "chain", "takewhile", "dropwhile", "tee", "list", "reduce", "range", "sum", "exhaust", "forEach", "every", "sorted", "reversed", "some", "iextend", "groupby", "groupby_as_array"];MochiKit.Iter.__new__ = function () { var m = MochiKit.Base; this.StopIteration = new m.NamedError("StopIteration"); this.iteratorRegistry = new m.AdapterRegistry(); // Register the iterator factory for arrays this.registerIteratorFactory( "arrayLike", m.isArrayLike, this.arrayLikeIter ); this.registerIteratorFactory( "iterateNext", this.hasIterateNext, this.iterateNextIter ); this.EXPORT_TAGS = { ":common": this.EXPORT, ":all": m.concat(this.EXPORT, this.EXPORT_OK) }; m.nameFunctions(this); };MochiKit.Iter.__new__();//// XXX: Internet Explorer blows//if (!MochiKit.__compat__) { reduce = MochiKit.Iter.reduce;}MochiKit.Base._exportSymbols(this, MochiKit.Iter);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -