欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

angular forEach方法遍历源码解读

程序员文章站 2022-03-07 10:43:30
angular中提供了foreach()方法用于遍历对象或数组,供大家参考,具体内容如下 function foreach(obj, iterator, cont...

angular中提供了foreach()方法用于遍历对象或数组,供大家参考,具体内容如下

function foreach(obj, iterator, context) {
 var key, length;
 if (obj) {
  if (isfunction(obj)) {
   for (key in obj) {
    // need to check if hasownproperty exists,
    // as on ie8 the result of queryselectorall is an object without a hasownproperty function
    if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasownproperty || obj.hasownproperty(key))) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else if (isarray(obj) || isarraylike(obj)) {
   var isprimitive = typeof obj !== 'object';
   for (key = 0, length = obj.length; key < length; key++) {
    if (isprimitive || key in obj) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else if (obj.foreach && obj.foreach !== foreach) {
    obj.foreach(iterator, context, obj);
  } else if (isblankobject(obj)) {
   // createmap() fast path --- safe to avoid hasownproperty check because prototype chain is empty
   for (key in obj) {
    iterator.call(context, obj[key], key, obj);
   }
  } else if (typeof obj.hasownproperty === 'function') {
   // slow path for objects inheriting object.prototype, hasownproperty check needed
   for (key in obj) {
    if (obj.hasownproperty(key)) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else {
   // slow path for objects which do not have a method `hasownproperty`
   for (key in obj) {
    if (hasownproperty.call(obj, key)) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  }
 }
 return obj;
}

官方描述:

foreach方法可以遍历数组或对象,函数有三个参数为别为:value,key,obj。
1)、value value指当遍历的对象或数组元素当前的值
2)、 key 是对象属性的的key或者数组的索引
3)、 obj obj即被遍历的对象或数组本身

示例:

   var values = {name: 'misko', gender: 'male'};
   var log = [];
   angular.foreach(values, function(value, key) {
    this.push(key + ': ' + value);
   }, log);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。