ECMAScript 5 中的数组方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39759115/article/details/82287701

ECMAScript 5 中的数组方法

ECMAScript 5定义了9个新的数组方法来遍历、映射、过滤、检测、简化和搜索数组。

forEach()方法

forEach()方法从头至尾遍历数组,为每个元素调用指定的函数。

注意, forEach()无法在所有元素都传递给调用的函数之前终止遍历。

如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出 foreach.break 异常,循环会提前终止:

			function foreach(a,f,t) {
				try { a.forEach(f,t); }
				catch(e) {
					if (e === foreach.break) return;
					else throw e;
				}
			}
			foreach.break = new Error("StopIteration");

map()方法

map()方法将调用的数组的每个元素传递给指定的函数,并返回一个新数组,它包含该函数的返回值。

filter()方法

filter()方法返回的数组元素是调用的数组的一个子集。

传递的函数是用来逻辑判断的:该函数返回true或false。如果返回值为true(或能转化为true值),那么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中。

注意, filter()会跳过稀疏数组中缺少的元素,它的返回数组总是稠密的。

  • 压缩稀疏数组的空缺:
		var dense = sparse.filter(function() { return true; });
  • 压缩空缺并删除undefined和null元素:
		var a = a.filter(function(x) { return x !== undefined && x != null; });

every()some()方法

every()some()方法是数组的逻辑判定:它们对数组元素应用指定的函数进行判定,返回true或false。

(注意,一旦every()some()确认该返回什么值它们就会停止遍历数组元素)

  • every()方法当且仅当针对数组中的所有元素调用判定函数都返回true,它才返回true;一旦有一个判定函数返回false,它立即返回false。

  • some()方法当数组中至少有一个元素调用判定函数返回true,他就返回true;并且当且仅当数值中的所有元素调用判断函数都返回false,它才返回false。

    注意,根据数学上的惯例,在空数组上调用时, every()返回true, some()返回false。

reduce()reduceRight()方法

reduce()reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中是常见的操作,也可称为‘注入’和折叠。

  • reduce()需要两个参数。第一个是执行化简操作的函数(化简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回化简后的值)。第二个参数(可选)是一个传递给函数的初始值(不传时,将使用数组第一个元素作为初始值)。

    在空数组上,不带初始值参数调用reduce()将导致类型错误异常。

如果调用它的时候只有一个值(数组只有一个元素并且没有指定初始值,或者有一个空数组并且指定一个初始值)reduce()只是简单地返回那个值而不会调用化简函数。

  • reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是从低到高。

indexOf()lastIndexOf()

indexOf()lastIndexOf()搜索整个数组中具有给定值的元素,并返回找到的第一个元素的索引(没找到就返回-1)。

第一个参数是需要搜索的值,第二个参数是可选的:它指定数组中的一个索引,从哪里开始搜索。

判断数组和类数组

在ECMAScript 5 中可以用Array.isArray()函数判断一个未知对象是否为数组。

		var isArray = Function.isArray || function(o) {
					return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]";
		};		

arguments 类数组对象和 DOM 方法返回的类数组对象:

function isArrayLike(o) {
		if (o &&                                    // o非null, undefined等
			typeof o === "object" &&				// o是对象	
			isFinite(o.length) &&					// o.length是有限数值
			o.length >= 0 &&						// o.length 为非负数
			o.length === Math.floor(o.length) &&	// o.length 是整数
			o.length < 4294967296 )					// o.length < 2^32
				return true;							// o是类数组对象
			else
				return false;							// o不是类数组对象
		}			

猜你喜欢

转载自blog.csdn.net/qq_39759115/article/details/82287701
今日推荐