JavaScript中的遍历器

JavaScript中 Map Set详解

Map和Set

1、for

 //1.for  最重要  兼容性好
        var arr = [10, 20, 30, 40]
        for (let i = 0; i < arr.length; i++) {
            arr[i]
        }

2、for in 循环

// for in 循环主要用于遍历普通对象, i 代表对象的 key 值, obj[i] 代表对
//应的 value, 当用它来遍历数组时候, 多数情况下也能达到同样的效果, 但是你
//不要这么做, 这是有风险的, 因为 i 输出为字符串形式, 而不是数组需要的数
//字下标, 这意味着在某些情况下, 会发生字符串运算, 导致数据错误, 比如:
 //'52' +1 = '521' 而不是我们需要的 53。另外for in 循环的时候, 不仅遍历
//自身的属性, 还会找到 prototype 上去, 所以最好在循环体内加一个判断,
//就用 obj[i].hasOwnProperty(i), 这样就避免遍历出太多不需要的属性。
      var obj={name:"karen",age:"13"}
       for(var key in obj){
         console.log(key,obj[key]);
           }
     var arr = [10, 20, 30, 40]
    for (var i in arr) {
        console.log(i, arr[i]);
       }

3、Array forEach 循环

//forEach循环, 循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道
//数组长度, 他有三个参数, 只有第一个是必需的, 代表当前下标下的 value。
//另外请注意, forEach 循环在所有元素调用完毕之前是不能停止的, 它没break
//语句, 如果你必须要停止, 可以尝试try-catch 语句, 就是在要强制退出的时
//候,抛出一个 error 给catch 捕捉到, 然后在catch 里面return, 这样就能中
//止循环了, 如果你经常用这个方法, 最好自定义一个这样的 forEach 函数在你
//的库里
 var arr = [10, 20, 30]
        var re = arr.forEach(function (el) {
            console.log(el);
        }) //函数调用了3次  没有返回值
        console.log(re);

3、1自己封装一个foreach

var arr = [10, 20, 30]
        Array.prototype.myforeach = function (callback) {
            for (var i = 0; i <= this.length; i++) {
                callback(this[i])
            }
        }
        var re = arr.myforeach(function (el) { //实参
            console.log(el);
        })

        var arr = [10, 20, 30]
        var re = arr.forEach(function (el, index, arr) {
            console.log(el, index, arr); //元素,元素下标,元素所属数组
        })

4、Array map() 方法

//map() 方法返回一个新数组, 数组中的元素为原始数组元素调用函数处理后的
//值。注意: map 和 forEach 方法都是只能用来遍历数组, 不能用来遍历普通对
//象。
      var re = arr.map(function (el) {
                console.log(el);
                return 100
            })
            console.log(re, arr);

        var arr = [10, 20, 30]
        var re = arr.map(function (el, index, arr) {
    console.log(el, index, arr); //元素,元素下标,元素所属数组
        })

  var arr=[{name:"karen",birth:"2001-02-03"},{name:"jack",birth:"2002-02-03"}]
        var arr2=arr.map(function(el){
        	el.age=new Date().getFullYear()-new Date(el.birth).getFullYear()
        	return el
        })
        console.log(arr2)
        [{name:"karen",birth:"2001-02-03",age:21},{name:"jack",birth:"2002-02-03",age:20}]

5、Array filter() 方法

//filter 方法是 Array 对象内置方法, 它会返回通过过滤的元素, 不改变原来的
//数组。
 var arr = [10, 20, 30, 40]
        var re = arr.filter(function (el, index, arr) {
            console.log(el);
            if (el > 20) {
                return true
            } else {
                return false
            }
        })
        console.log(re);

        var arr=[{tag:0,name:"karen"},{tag:1,name:"jack"},{tag:1,name:"marry"}]
        var arr2=arr.filter(function(el){
          	return el.tag
        })
        console.log(arr2)

6、Array some() 方法

//some() 方法用于检测数组中的元素是否满足指定条件( 函数提供), 返回 
//boolean 值, 不改变原数组。
    var arr = [10, 29, 304, 43]
        var re = arr.some(function (el) {
            return el > 29
            //返回true后不再执行
        })
        console.log(re);

        //预测笔试题设计mysome
        Array.prototype.mysome=function(callback) {
        	for(var i=0;i<this.length;i++){
        		if(callback(this[i],i,this)){return true}
        	}
        	return false				
        }			
        var  arr=[10,200,500,400]
        var re=arr.mysome(function(el){
        	console.log(el)
        	return el>100
        })
        console.log(re

7、Array reduce() 方法

//reduce() 方法接收一个函数作为累加器, 数组中的每个值( 从左到右) 开始缩
//减, 最终计算为一个值。
 var re = [10, 20, 30, 40] //调用了3次
        var re = arr.reduce(function (n1, n2) {
            console.log(n1, n2, 222);
            //return 90//返回值作为下一次调用的n1
            return n1 + n2
        }, 111) //调用了4次
        console.log(re);

8、Array every() 方法

let arr = [1, 2, 3];
let tt = arr.some(function(i) {
return i > 1;
})
// 检测数组中元素是否都大于1
// false
//every() 方法用于检测数组所有元素是否都符合指定条件( 通过函数提供), 
//返回 boolean 值, 不改变原数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 遍历是一种可以遍历数据结构所有元素的接口,它的作用类似于指针。而遍历对象则是具体的实现了遍历接口的对象。每个具体的数据结构都需要自己实现自己的遍历对象,以便于我们通过遍历对数据结构进行操作。 ### 回答2: 遍历(Iterator)是一种统一的接口,用来遍历各种不同的数据结构。它可以定义在任何对象上,通过持续返回序列的下一个值来实现遍历遍历通过两个方法来实现:一个是返回当前位置的值的next方法,另一个是返回遍历是否结束的布尔值的done方法。 遍历对象(Iterator Object)则是实现了遍历接口的对象。它可以通过Symbol.iterator方法返回,也就是说,一个对象的Symbol.iterator方法是它的默认的遍历生成函数。遍历对象具有next、return和throw三个方法,其next方法用来返回序列的下一个值,return方法用来终止遍历,throw方法用来抛出异常。 由于遍历对象实现了遍历接口,因此在使用遍历的地方,只要返回了遍历对象,就可以进行遍历操作。而且,通过遍历对象的next方法,可以依次取得序列的下一个值。 值得注意的是,遍历对象不仅可以用于数组和Set等数据结构,还可以用于自定义的数据结构。通过在对象上定义Symbol.iterator方法,并返回一个遍历对象,我们就可以使得对象可以被for...of循环和其他遍历操作使用。 综上所述,遍历遍历对象之间的关系是,遍历是一种接口,通过返回当前位置的值和判断遍历是否结束的布尔值实现遍历;而遍历对象则是具体实现了遍历接口的对象,可以通过Symbol.iterator方法返回,用来在各种具体的数据结构上进行遍历操作。 ### 回答3: 遍历指的是一种基于迭代模式的接口,它提供了一个统一的方法来遍历数据结构的元素。而遍历对象是实现了遍历接口的对象。 在JavaScript,我们可以使用`Symbol.iterator`来创建一个遍历对象,这个对象必须具有一个`next`方法,用来返回数据结构的下一个值。`next`方法返回一个具有`value`和`done`两个属性的对象,`value`表示当前迭代的值,`done`表示迭代是否结束。 遍历对象是可以被循环调用的,每次调用`next`方法都会返回当前的值并且更新迭代的状态,直到迭代结束`done`为`true`。我们可以使用`for...of`循环来遍历遍历对象,它会自动调用`next`方法并获取返回的值。 遍历遍历对象之间的关系是一一对应的,一个遍历对象是一个可迭代的数据结构,它就像一个指针一样在数据结构移动并获取对应的值。不同的数据结构有不同的遍历方式,但它们的遍历对象都遵循了相同的接口规范,即具有`next`方法返回迭代的值。 总之,遍历遍历对象之间是一种接口与实现的关系,遍历对象是通过实现遍历接口来实现遍历数据结构的功能。通过遍历对象,我们可以方便地迭代访问数据结构的值,而不用关心具体的遍历实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值