ECMAScript5新增数组API的一些细节

ECMAScript5新增的数组方法看似都比较简单其实还是有一些细节需要了解的

首先这些方法都不会作用于原数组,其次是在对稀松数组的处理上.

(1)这些方法在稀松数组缺少的元素上都不会执行回调函数

(2)map的返回值包括稀松数组缺少的元素,而filter方法会过滤掉稀松数组的缺少元素,从而返回的都是一个紧凑的数组

var a = new Array(10);
	a[0] = null ;
	a[1] = undefined;
	var _a = a.map(function(){
		return 1;
	});
	console.info(a);//[ null, undefined, , , , , , , , ,  ]
	console.info(_a);//[ 1, 1, , , , , , , , ,  ]

	_a = a.filter(function(){
		return true;
	});
	console.info(_a);//[ null, undefined ]

在一些不支持这些方法的游览器中我们是如何实现这些方法呢

首先要处理的问题是在迭代过程中如何过滤掉缺少元素,用

for (var i = 0; i < arr.length; i++)的循环方法是行不通的,因为数组的长度是包括缺失元素的,并且我们不能通过undefined来判断这是否是一个缺少元素还是故意设置的undefined值,其实想想js数组的特殊性这个问题还是很好解决的我们直接用for in便可过滤掉缺失的元素

下面给出在不支持这些方法的游览器上我们如何自己实现

var each = Array.prototype.forEach ?   Array.prototype.forEach  : function(callback) {
               var arr=this;
               for (var i in arr) {
                    var item = arr[i];
                    callback.call(item, item, i, arr);
               }
          }
          Array.prototype.each = each;

          var map = Array.prototype.map ?   Array.prototype.map  : function(callback) {
               var arr = this;
               var _arr = arr.slice(0);
               for (var i in arr) {
                    var item = arr[i]
                    _arr[i] = callback(item, item);
               }
               return _arr;
          }
          Array.prototype.map = map;

          var filter= Array.prototype.filter ? Array.prototype.filter : function(callback) {
               var r = [];
               var arr = this;
               for (var i in arr) {
                    var item = arr[i];
                    if(callback.call(item, item)) {
                         r.push(item);
                    }
               }
               return r;
          }
          Array.prototype.filter = filter;

时间: 2024-10-13 16:03:53

ECMAScript5新增数组API的一些细节的相关文章

JavaScript中对数组和数组API的认识

JavaScript中对数组和数组API的认识 一.数组概念: 数组是JavaScript中的一类特殊的对象,用一对中括号“[]”表示,用来在单个的变量中存储多个值.在数组中,每个值都有一个对应的不重复的索引值.自动匹配索引值的数组称为索引数组,自定义索引值的数组称为关联数组(又叫哈希数组).以下均研究索引数组. 二.创建数组: 使用数组之前首先都要先创建并赋值给一个变量,创建数组有两种不同的方法. 1.调用构造函数Array()创建数组,索引数组索引值都从0开始 eg:var arr=New

数组Array、数组API

1.数组:批量管理多个数据的存储空间. 数组的作用:现实中,批量管理多个数据都是集中分组存放,良好的数据结构,可极大提高程序的执行效率! 优点:方便查找 2.创建数组:(4种方式) (1)var 变量名=[]; 创建一个空数组 何时使用:暂时不知道数组中的元素内容时(2)var 变量名=[值1,值2,...]; -->创建数组同时,初始化数组中的数据(3)var 变量名=new Array(); 创建一个空数组 new:在window之外,创建一个新空间,保存多个数据 返回新空间的地址! 注意:

js中数组API以及ES6总结

1. 数组API2. ES6: 1. 数组API: 遍历: 对数组中每个元素执行相同的操作 arr.forEach(): 对原数组中每个元素执行相同的操作 arr.forEach(function(elem,i,arr){ //对当前元素执行操作,并保存回原数组的当前位置}) arr.map(): 复制出原数组中每个元素,执行相同操作后,放入新数组返回.原数组保持不变. var newArr=arr.map(function(elem,i,arr){ return 新值}) 过滤和汇总: 过滤:

es6新增的api

从值的转换到数学计算,ES6给各种内建原生类型和对象增加了许多静态属性和方法来辅助这些常见任务.另外,一些原生类型的实例通过各种新的原型方法获得了新的能力. 注意: 大多数这些特性都可以被忠实地填补.我们不会在这里深入这样的细节,但是关于兼容标准的shim/填补,你可以看一下"ES6 Shim"(https://github.com/paulmillr/es6-shim/). Array 在JS中被各种用户库扩展得最多的特性之一就是数组类型.ES6在数组上增加许多静态的和原型(实例)的

数组API(2)

ES5中数组新增API: 1. indexOf 作用:检测当前数据是否在数组中存在: 特点:如果存在返回相对应的下标,如果不存在则返回-1: 如果数组中存在多个需要判断的这个数据,则返回最近的这个数据的下标; 可以传递两个参数,第二个参数指定查询的起始位置: 示例: var arr = [10,20,30,40,50,30];                 var index1= arr.indexOf(30);                   var index2 = arr.index

5.4新增数组声明方式,5.3及以下不支持

php 5.4版以后可以这么写,新增的数组简写语法. $data = [ 'start_time' => '123', 'end_time' =>'456' ]; php 5.3版及以前的版本不接受这么写...

数组Api .map()的使用

之前并没有过多的使用过这个Api,在此记录下对其的理解,方便以后多多使用. 首先是对map的说明: var mappedArray = array.map(callback[, thisObject]); callback: 要对每个数组元素执行的回调函数. thisObject : 在执行回调函数时定义的this对象. 其可以为数组中的每一个元素执行一次回调函数,并将返回值存入一个新数组中.它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略.map 不会改变原有数组,调函

ES5新增数组方法every()、some()、filter()、map()

JavaScript ES5标准中新增了一些Array方法,如every().some().filter().map().它们的出现使我们能够更加便利地操作数组,但对IE9以下浏览器的兼容性比较差.下面来看一下它们的用法. //数组中的元素全部满足指定条件返回true //运行结果为false var checknum = [15,3,2,6,7,1,9,10]; var checkresult = checknum.every(function(item,index,array){ retur

腾讯微博java(android)sdk新增微博api详细介绍

本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见sdk使用总介绍 1.8个接口介绍 这8个接口包含了腾讯微博两部分api 1.1.微博相关中的发表一条微博.转播一条微博.回复一条微博.发表一条带图片微博.点评一条微博.发表音乐微博.发表视频微博.发表心情帖子.在api中发表一条微博和发表一条带图片微博合二为一. 1.2.私信相关中的发私信api