javascript迭代器

    xiaoxiao2026-08-06  1

    javascript迭代器

    迭代器:提供一种顺序访问聚合对象各个元素方法,并不暴露该对象

    jQuery迭代器

    $.each([1, 2, 3, 4], function (i, n) { console.log(i +'---'+ n); })

    自定义迭代器

    var each = function (ary, callback) { for (var i = 0, l = ary.length; i < l ; i++){ callback.call(ary[i], i, ary[i]); } }; each([1, 2, 3, 4], function (i, n) { console.log(i+'----'+n); })

    内部迭代器和外部迭代器

    内部迭代器 请求一次就会得到执行结果

    var each = function (ary, callback) { for (var i = 0, l = ary.length; i < l ; i++){ callback.call(ary[i], i, ary[i]); } }; var compare = function (ary1, ary2) { if(ary1.length !== ary2.length){ throw new Error('两个对象不相等!'); } each(ary1, function (i, n) { if(n !== ary2[i]){ throw new Error('两个对象不相等!'); } }); console.log('两个对象相等'); }; compare([1, 2, 3], [1, 2, 4]);

    外部迭代器 外部迭代器需要每次显示的调用。

    var Iterator = function (obj) { var current = 0; //指定当前读取的位置

    var next = function () { current += 1; }; var isDone = function () { //是否已经读取到最后 return current >= obj.length; }; var getCurrItem = function () { return obj[current]; }; return { next: next, isDone: isDone, getCurrItem: getCurrItem }

    }

    上面内部迭代器比较的例子,用外部迭代器就要使用循环显示的每次去比较

    迭代数组字面量和字面量对象

    这是jQuery的内部实现

    //判断是否是类数组 function isArraylike( obj ) { var length = obj.length, type = jQuery.type( obj ); if ( jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || type !== "function" && ( length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj ); } myEach = function (obj, callback) { var value, i = 0, length = obj.length, isArray = isArraylike(obj); //是否是类数组对象 if(isArray){ //迭代类数组 for (; i < length; i++){ value = callback.call(obj[i], i, obj[i]); if(value === false){ break; } } }else{ for (i in obj){ value = callback.call(obj[i], i, obj[i]); if(value === false){ break; } } } } myEach({name:'xin', age: 23}, function (i, value) { console.log(value); })
    转载请注明原文地址: https://ju.6miu.com/read-1310920.html
    最新回复(0)