⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iter.js

📁 Ajax下日志框架
💻 JS
📖 第 1 页 / 共 2 页
字号:
        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 + -