数组遍历方法对比

数组遍历方法对比

forEach函数

函数说明: forEach(f [,o]): 此方法类似于for/in循环,其作用是遍历整个数组并执行函数的某些操作,但它不会遍历数组的属性。它接受一个函数参数,该函数可以有1、2与3个参数。完整的三个参数分别为:数组中的每一个值,数组的索引,数组本身。这个函数没有返回值。

获取数组方法:

function getArray(){
  var a = new Array(10);
  for(var i=0, j=a.length; j>i; i++)
    a[i] = i+1;
  return a;
}

测试方法:

function testForEach(){
  var a = getArray();
  var b = a.forEach(function(e, i){
    console.log(e, i);
    if(0 === e % 2) return false;
    else return true;
  });
  return [a, b];
}

testForEach()
// @return [ [1-10], undefined ]

总结:

  • 参数第一个是elem,第二个才是index,这个和jQuery的$.fn.each方法不同;
  • 返回默认是undefined;
  • 对原数组没有影响。

map函数

函数说明:类似于forEach()方法,但它有返回值—一个新数组,它的参数函数必须有返回值,参数函数的返回值作为新数组的元素。其它用法与forEach()方法类似。

测试方法:

function testForEach(){
  var a = getArray();
  var b = a.map(function(e, i){
    console.log(e, i);
    if(0 === e % 2) return false;
    else return true;
  });
  return [a, b];
}

testForEach()
// @return [ [1-10], [true, false, true, false , ... ] ]

总结:

  • 参数也分别是elem, index;
  • 返回是一个数组,包含的元素是每个迭代的返回内容;
  • 对原数组没有影响

filter函数

函数说明:对数组元素进行过滤,返回一个符合要求的新数组。

测试方法:

function testForEach(){
  var a = getArray();
  var b = a.filter(function(e, i){
    console.log(e, i);
    if(0 === e % 2) return false;
    else return true;
  });
  return [a, b];
}

testForEach()
// @return [ [1-10], [1,3,5,7,9] ]

总结:

  • 参数也分别是elem, index;
  • 返回是一个数组,在迭代里返回true才会被push在返回的数组里
  • 对原数组没有影响

every函数

函数说明:有一个布尔类型的返回值,函数参数f用来检测数组元素是否满足要求。有且只有数组全部元素都满足f的要求时,才会返回true,否则返回false。

测试方法:

function testForEach(){
  var a = getArray();
  var b = a.every(function(e, i){
    console.log(e, i);
    if(0 === e % 2) return false;
    else return true;
  });
  return [a, b];
}

testForEach()
// @return [ [1-10], false ]

function testForEach(){
  var a = getArray();
  var b = a.every(function(e, i){
    console.log(e, i);
    return true; // 直接改返回true
  });
  return [a, b];
}

testForEach()
// @return [ [1-10], true ]

总结:

  • 参数也分别是elem, index
  • 不影响原数组
  • 在迭代中,一旦返回false,那就会中断迭代,返回false; 如果顺利迭代完成,则返回true;

some函数

函数说明:与every()方法不同,只要有数组元素满足f的要求就返回true,否则返回false。

function testForEach(){
  var a = getArray();
  var b = a.some(function(e, i){
    console.log(e, i);
    if(0 === e % 2) return false;
    else return true;
  });
  return [a, b];
}

// @return [ [1-10], true ]

总结:

  • 参数都也elem, index
  • 不影响原数组
  • 在迭代中,一旦返回false,那就会中断迭代,但如果之前有一个返回true的也会返回true,如果没就返回false;如果顺利迭代完成,则返回true;

reduce函数

函数说明: reduce(f [, initial, index, array]): 对数组元素值进行计算。返回最后一次计算的值。函数f(x,y)接受两个参数,如果有初始值,则把初始值作为x计算,然后把每一次的计算值作为下一次的x,把数组元素依次作为y。

a.reduce(function(x, y){console.log(x, y); return x + y;}, 0)
// 0 1 VM1124:2
// 1 2 VM1124:2
// 3 3 VM1124:2
// 6 4 VM1124:2
// 10 5 VM1124:2
// 15 6 VM1124:2
// 21 7 VM1124:2
// 28 8 VM1124:2
// 36 9 VM1124:2
// 45 10 VM1124:2
// 55

reduceRight(): 与reduce()函数作用相同,只是它从右向左依次取数组元素。

indexOf函数

indexOf(value [, start]): 根据值来找到相应在数组中的索引位置,取多个匹配索引用最小的那个或在没有匹配的情况下返回-1。

lastIndexOf(value [, start]): 与indexOf()函数相似,只是它是从后面向前面进行搜索。

数组遍历方法对比

时间: 2024-08-27 07:25:08

数组遍历方法对比的相关文章

【Java】用JDK1.5之后的新型数组遍历方法遍历HashMap、HashMap不应该存储多元组

在JDK1.5就多了一种for循环的遍历写法,现在应该没有人用JDK1.4了吧?我见那些2005年出的JAVA书,谭浩强系列的JAVA书都是使用JDK1.5了,当然JDK1.7已经使用的,据说JDK1.7是兼容JDK1.2~JDK1.7,现在的JAVA编程都是基于JDK1.5的.然而由于考试不要求或者其它什么原因,它并不受程序猿的青睐,而在平常实践用,旧式的循环中用多了,老程序猿依旧作为开发主力的情况,也就没有人敢于尝试这种新型的数组遍历方法了,其实这种方法在遍历HashMap的时候尤其有用,能

js数组遍历方法总结

数组遍历方法 1.for循环 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显. for(j = 0,len=arr.length; j < len; j++) { } 2.foreach循环 遍历数组中的每一项,没有返回值,对原数组没有影响,不支持IE //1 没有返回值 arr.forEach((item,index,array)=>{ //执行代码 }) //参数:value数组中的当前项, index当前项的索引, array原始数组: //数组中有

JavaScript 数组遍历方法的对比

前言 JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 代码: var arr = [1,2,4,6] for(var i = 0, len = arr.length; i < len; i++){ console.log(arr[i]) } 复制代码 这是标准for循环的写法也是最传统的语句,字符串也支持,定义一个变量i作为索引,以跟踪访问的位置,len是数组的长度

浅谈JS的数组遍历方法

用过Underscore的朋友都知道,它对数组(集合)的遍历有着非常完善的API可以调用的,_.each()就是其中一个.下面就是一个简单的例子: var arr = [1, 2, 3, 4, 5]; _.each(arr, function(el) { console.log(el); }); 上面的代码会依次输出1, 2, 3, 4, 5,是不是很有意思,遍历一个数组连for循环都不用自己写了._.each()方法遍历数组非常好用,但是它的内部实现一点都不难.下面就一起来看看到底是如何实现_

js几种数组遍历方法.

第一种:普通的for循环 for(var i = 0; i < arr.length; i++) { } 这是最简单的一种遍历方法,也是使用的最多的一种,但是还能优化. 第二种:优化版for循环 for(var i = 0,len=arr.length; i < len; i++) { } 这种看上去和第一种差不多,主要是避免重复获取数组长度,当数组很大时才能看到明显效果. 第三种:foreach循环 arr.forEach(function(e){ }); 数组自带的foreach循环,使用

php7简短而安全的数组遍历方法

在写 PHP 的数组遍历的时候,我们通常会这样写: foreach ($definition['keys'] as $id => $val) { // ... } 但是其实这样会引起一个重要的问题:如果 $definition['keys'] 没有定义的话,这个时候的数组变量(也就是 foreach)就会出现错误. 所以,我们进阶成这个样子: if (!empty($definition['keys']) { foreach ($definition['keys'] as $id => $va

数组定义方法 数组遍历方法 全局变量和局部变量定义 赋值传值和赋值传址定义

数组的定义方法: 方式一:使用new运算符结合Array()构造函数来创建 var arr = new Array(); 方式二:创建指定长度的数组,()中只有一个整数 var arr = new Array(3); 数组的长度:arr.length,只能统计一维数组的长度. 方式三:将多个数组元素添加小括号()中,各个元素间用逗号隔开 var arr = new Array(10,20,30,40,50); 方式四:使用中括号[]来创建一个数组 var arr = [10,20,30,40];

JavaScript 的 4 种数组遍历方法: for VS forEach() VS for/in VS for/of

我们有多种方法来遍历 JavaScript 的数组或者对象,而它们之间的区别非常让人疑惑.Airbnb 编码风格禁止使用 for/in 与 for/of,你知道为什么吗? 这篇文章将详细介绍以下 4 种循环语法的区别: for (let i = 0; i < arr.length; ++i) arr.forEach((v, i) => { /* ... */ }) for (let i in arr) for (const v of arr) 语法 使用for和for/in,我们可以访问数组的

JS数组遍历方法集合

就让我们在逆战中成长吧,加油武汉,加油自己 1.for循环 使用零时变量将长度存起来,当数组较大时优化效果才会比较明显. var ar1=[2,4,6,8] for(var i=0;i<ar1.length;i++){ console.log(i) console.log(ar1[i]) } 2.foreach循环 遍历数组中每个数,没有返回值 使用break不能中断循环,使用return也不能返回到外层函数 var ar1=[2,4,6,8] ar1.foreach((item,index,a