ES5/ES6 数组对象的循环

var arr = [1,2,3,4,2];

 Array.prototype.aa = function(){}
Array.prototype.bb = 'bb';
 //如果用for..in来寻欢arr这个数组的话   会把原型链上面的方法和属性都一起循环了     
//所以一般不用这个API来循环数组  一般是直接使用for来循环当前数组

 

//数组的循环方式
            /*
            array.forEach(callback(currentValue, index, array){
                //do something
            }, this)
            
            callback  为数组中每个元素执行的函数,该函数接收三个参数:
                currentValue  数组中正在处理的当前元素。
                index可选   数组中正在处理的当前元素的索引。
                array可选  forEach()方法正在操作的数组。
            thisArg可选 可选参数。当执行回调 函数时用作this的值(参考对象)。

            //forEach() 方法对数组的每个元素执行一次提供的函数。是没有返回值的
            //forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)
            //forEach 无法在所有元素都传给给调用的函数之前终止遍历
            // return false在执行中只是终止本次继续执行  而不是终止for循环的额
            //forEach  无法通过正常方式终止遍历  但是可以通过抛出异常的方式实现终止

arr.forEach(function(val,key,arr){
	if(val == 2){
		console.log(val);
		//continue;  
		//break;
		//return false
		//上述三种方式都不能终止遍历  而且会报错哦
	}
	
})
//阻止forEach的方式   但是不建议使用
try{
	arr.forEach(function(val,key){
		console.log(val);
		if(val == 2){
			
			throw new Error('error');
		}
	})
}catch(e){
	if(e.message != 'error') throw e;
}

//可选参数的  thisArg可选
function Counter() {
	this.sum = 0;
	this.count = 0;
}

Counter.prototype.add = function(array) {
	array.forEach(function(entry) {
		this.sum += entry;
		++this.count;
	}, this);
	//console.log(this);
};

var obj = new Counter();
obj.add([1, 3, 5, 7]);

obj.count; 
// 4 === (1+1+1+1)
obj.sum;
// 16 === (1+3+5+7)

//every方法
 //every  默认的就是返回一个false;代码没有return关键词 返回就是默认的,而且循环第一个就退出了
 //  有返回的话  根据返回的条件来判断   如果判断条件为真则继续循环  为假则直接跳出循环
 //    return true   则循环完数组的每一个元素,return false  循环第一个的时候就退出了

var arr = [1,2,3,4,2];
var item = arr.every(function(val,key){
	    console.log(val);
	    //return val>2;
	    //return true;
	})
	console.log(item);

//some方法   基本与every是相反的
//some  默认的就是返回一个false;代码没有return关键词  返回就是默认的,但是数组会全部循环完
//  有返回的话  根据返回的条件来判断   如果判断条件为真则跳出循环  为假则直接继续循环
//    return true   则循环第一个的时候就退出了,return false  循环完数组的每一个元素

var arr = [1,2,3,4,2];
var item = arr.some(function(val,key){
	console.log(val);
	//return val>2;
	//return true;
})
console.log(item);

filter方法
   // 使用指定的函数册数数组所有的元素   创建并返回一个包含所有通过测试的元素的一个新数组
   //filter为数组中的每个元素调用一次callback(不包括通过某些方法删除或者未定义的项,值定义为undefined的项除外),
     并利用所有callback返回true或等价于true的元素创建一个新数组,未通过callback测试的元素会被跳过,不会包含在新数组里。
    用法
        1.去掉数组中的空字符串项
        2.去掉数组中不符合的项

var arr = [1,2,3,4,2];
var item = arr.filter(function(val,key){
	return val>2;
})
console.log(item);  //[3,4];

map方法  
    //有返回值(创建一个新的数组)  可以return出来的  如果回调函数里面没有return关键词   默认返回undefined
    //return出来的值  就是相当于添加到一个新数组里面去了  

var arr = [1,2,3,4,2];
var item = arr.map(function(val,key){
	return val*2;
})
console.log(item);  //[2,4,6,8,4];

for In遍历对象
            一般不推荐遍历数组   因为for in遍历后不能保证顺序  而且原型链上面的属性和方法也会遍历到
            因此一般常用来遍历非数组的对象并且使用
            for In得到的是对象的key
            for of得到的是对象的value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值