• ECMAScript5 Array新方法小结


    ECMAScript5规范给Array引入了不少新的方法,看起来都挺实用,值得熟悉一下,目前在IE9和其他标准浏览器中均以实现,IE8之前的只能用降级了.

    有个浏览器对ECMAScript5规范支持情况的总结表格,很不错,感兴趣的朋友可以参考下,点击查看

    为了熟悉这几个新方法,我自己也特意总结了下:

    "use strict";
    		
    		function print(s) {
    			console.log(s);
    		}
    		// test array
    		var array = [34, 12, 'Andrew', 'Frank', -23, 'American', 54, 'India', 98, 17, 'Jackson'];
    		
    		// indexOf(searchElement[, startIndex])
    		// 通常情况下从数组的第一个元素开始查找
    		print( array.indexOf('Andrew') );   // 2
    		// 可选参数startIndex,用于指定从数组的第几个索引开始查找
    		// startIndex是负值,则是相对于数组末尾的位置
    		print( array.indexOf('American', 2) ); // 5
    		print( array.indexOf('American', -6) );  // 5
    		// 未找到则返回-1
    		print( array.indexOf('USA') ); // -1
    		
    		// lastIndexOf(searchElement[, startIndex])
    		// 处理顺序与indexOf相反,从元素的末尾开始查找
    		print( array.lastIndexOf('India') );  // 7
    		// startIndex指定从某个索引开始往前查找
    		print( array.lastIndexOf('Frank', 8) );  // 3
    		// startIndex是负值,则是相对于数组末尾的位置
    		print( array.lastIndexOf('Frank', -2) );  // 3
    		// 未找到则返回-1
    		print( array.lastIndexOf('USA') ); // -1
    		
    		// every(callbackfn[, thisArg])
    		// callbackfn: function(value[,index[,array]])
    		// 从第一个元素开始,调用callbackfn
    		// 只要遇到一次callbackfn调用返回false,那么every方法则返回false.
    		// 如果所有callbackfn调用都返回true,那么every方法返回true
    		// 如果是空数组返回true
    		// 可选参数thisArg用于指定callbackfn中this的值
    		var isAllNum = array.every(function(value, index) {
    			// normal: window, 'strict mode': undefined
    			// print( this ); 
    			return typeof value === 'number';
    		});
    		print( isAllNum ); // false
    		
    		// some(callbackfn[, thisArg])
    		// callbackfn: function(value[,index[,array]])
    		// 从第一个元素开始,调用callbackfn
    		// 只要遇到一次callbackfn调用返回true,那么every方法则返回true.
    		// 如果所有callbackfn调用都返回false,那么every方法返回false
    		// 如果是空数组返回false
    		// 可选参数thisArg用于指定callbackfn中this的值
    		var hasNum = array.some(function(value) {
    			return typeof value === 'number';
    		});
    		print( hasNum ); // true
    		
    		// forEach(callbackfn[, thisArg])
    		// callbackfn: function(value[,index[,array]])
    		// 从第一个元素开始,调用callbackfn
    		// forEach总是返回undefined,它不会直接修改数组,但是callbackfn可以修改数组内容
    		// 可选参数thisArg用于指定callbackfn中this的值
    		var collector = {
    			numArr: new Array()
    		};
    		
    		array.forEach(function(value, index) {
    			if( typeof value === 'number' )
    				this.numArr.push(value);
    		}, collector);
    		
    		print(collector.numArr); // all numbers in array
    		
    		// map(callbackfn[, thisArg])
    		// callbackfn: function(value[,index[,array]])
    		// map方法通过对每个元素调用callbackfn对数组元素进行转换
    		// 并把转换后的值集合起来作为一个新数组返回,新数组长度和原数组一致
    		// map方法不会直接修改原数组,但是callbackfn可以修改原数组内容
    		// 可选参数thisArg用于指定callbackfn中this的值
    		var newArr = array.map(function(value, index, array) {
    			var type = typeof value;
    			switch(type) {
    			    // 改变原数组
    				case 'string':
    					array[index] = value.toUpperCase();
    					break;
    				case 'number': 
    					array[index] = -value;
    			}
    			return array[index];
    		});
    		
    		print( array );
    		print( newArr );
    		
    		// filter(callbackfn[, thisArg])
    		// callbackfn: function(value[,index[,array]])
    		// filter方法总是返回一个包含匹配元素的新数组,
    		// 如果没有匹配的元素,那它返回一个空数组
    		// 元素是否匹配,取决于调用callbackfn返回true还是false,true表示匹配,false反之
    		// filter方法不会直接修改原数组,但是callbackfn可以修改原数组内容
    		// 可选参数thisArg用于指定callbackfn中this的值
    		var strArr = array.filter(function(value, index) {
    			if(typeof value === 'string')
    				return value;
    		});
    		
    		print( strArr );
    		
    		// reduce(callbackfn[, initialValue])
    		// callbackfn: function(previousValue, value[,index[,array]])
    		// reduce方法实现一个数组元素的累加计算,并返回结果
    		// 每次对当前元素的callbackfn调用都将以前一次调用返回的结果作为参数previousValue的值
    		// reduce方法不会直接修改原数组,但是callbackfn可以修改原数组内容
    		// 可选参数initialValue用于指定首次调用callbackfn时参数previousValue的值
    		// 如果未指定initialValue,那么数组的第一个元素将作为previousValue的值,并且callbackfn不会在该元素上被调用
    		var sum = array.filter(function(value, index) {  
    			if(typeof value === 'number')
    				return value;
    		}).reduce(function(prev, value) {
    			return prev + value;
    		}, 0);
    		
    		print( sum );
    		
    		// reduceRight(callbackfn[, initialValue])
    		// callbackfn: function(previousValue, value[,index[,array]])
    		// reduceRight和reduce功能相同,主要处理的顺序不同, reduceRight从数组末尾开始
    		// 如果未指定initialValue,那么数组的最后一个元素将作为previousValue的值,并且callbackfn不会在该元素上被调用
    

     如果园友觉得我的总结还不是很直观,有个在线测试页面(来自微软官方),希望对大家有所帮助! :)

  • 相关阅读:
    句柄
    类,方法,抽象方法,接口
    Enum类型
    String 为什么是不可变的
    大数据怎么排序
    oracle创建表空间 导入数据库
    eclipse常见小问题
    eclipse创建项目
    存储过程
    在VMware通过挂载系统光盘搭建本地yum仓库
  • 原文地址:https://www.cnblogs.com/AndyWithPassion/p/ECMAScript5_Array_method.html
Copyright © 2020-2023  润新知