Js遍历数组总结

遍历数组的主要方法为forforEachmapfor infor of

for

var arr = [1,2,3,4,5];
var n = arr.length; // 直接取长度,避免每次循环都读取arr对象的属性
for(let i=0; i<n; ++i ){
console.log(arr[i]);
}
// 1 2 3 4 5 //循环体也可以这么写
for(let i=0, len=arr.length; i<len; ++i ){
console.log(arr[i]);
}
// 1 2 3 4 5

forEach

Array.prototype.forEach()

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])

callback 为数组中每个元素执行的函数,该函数接收一至三个参数

currentValue 数组中正在处理的当前元素

index 可选 数组中正在处理的当前元素的索引

array 可选 正在操作的数组

thisArg 可选 当执行回调函数callback时,用作this的值

注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this

注意如果想在遍历执行完之前结束遍历,那么forEachmap并不是好的选择

var arr = [1,2,3,4,5];
var obj = { a: 1 }; // 定义obj为了演示this用
arr.forEach( function(currentValue,index,array) {
console.log("当前值",currentValue);
console.log("当前值索引",index);
console.log("当前处理数组",array);
console.log("当前this指向",this);
console.log("结束一次回调,无需返回值");
console.log("");
},obj);
/*
当前值 1
当前值索引 0
当前处理数组 (5)[1, 2, 3, 4, 5]
当前this指向 {a: 1}
结束一次回调,无需返回值 当前值 2
当前值索引 1
当前处理数组 (5)[1, 2, 3, 4, 5]
当前this指向 {a: 1}
结束一次回调,无需返回值 ...........
*/
// forEach使用频率较高,但是性能不如普通for循环

map

Array.prototype.map()

arr.map(callback(currentValue [, index [, array]])[, thisArg])

callback 为数组中每个元素执行的函数,该函数接收一至三个参数

currentValue 数组中正在处理的当前元素

index 可选 数组中正在处理的当前元素的索引

array 可选 正在操作的数组

thisArg 可选 当执行回调函数callback时,用作this的值

注意如果使用箭头函数表达式来传入callbackthisArg参数会被忽略,因为箭头函数在词法上绑定了this

注意map回调函数return的结果组成了新数组的每一个元素,原数组被映射成对应新数组

var arr = [1,2,3,4,5];
var obj = { a: 1 }; // 定义obj为了演示this用
var newArr = arr.map( function(currentValue,index,array) {
console.log("当前值",currentValue);
console.log("当前值索引",index);
console.log("当前处理数组",array);
console.log("当前this指向",this);
console.log("");
return currentValue + 10; // 将arr值加10返回成为新数组
},obj);
console.log(newArr); // [11, 12, 13, 14, 15]
/*
当前值 1
当前值索引 0
当前处理数组 (5)[1, 2, 3, 4, 5]
当前this指向 {a: 1} 当前值 2
当前值索引 1
当前处理数组 (5)[1, 2, 3, 4, 5]
当前this指向 {a: 1} ...........
*/
//这种方式也是用的比较广泛的,但性能不如forEach

for in

// 此方法遍历数组效率非常低,主要是用来循环遍历对象的属性

// 遍历数组
var arr = [1,2,3,4,5];
for(item in arr){
console.log(arr[item]);
}
// 1 2 3 4 5
// 数组遍历时需注意,数组索引只是具有整数名称的枚举属性,并且与通用对象属性相同。
// 不能保证for ... in将以任何特定的顺序返回索引。
// for ... in循环语句将返回所有可枚举属性,包括非整数类型的名称和继承的那些。
// 因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。
// 因此当迭代访问顺序很重要的数组时,最好用整数索引去进行for循环 // 遍历对象
var obj = {a:1,b:2};
for(item in obj){
console.log(obj[item]);
}
// 1 2
// for ... in是为遍历对象属性而构建的

for of

for ofES6新增,其在可迭代对象包括ArrayMapSetString``TypedArrayarguments对象等等上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。

var arr = [1,2,3,4,5];
for (let value of arr) {
console.log(value);
}
// 1 2 3 4 5

operate

Array.prototype还提供了对于数组的判断与过滤操作,every()some()find()findIndex()filter()

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

// arr.everymap(callback(currentValue [, index [, array]])[, thisArg])
// every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
console.log(arr.every( (currentValue ) => {
return currentValue > 1;
})) // false console.log(arr.every( (currentValue ) => {
return currentValue > 0;
})) // true // arr.some(callback(element[, index[, array]])[, thisArg])
// some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
console.log(arr.some( (currentValue ) => {
return currentValue > 1;
})) // true console.log(arr.some( (currentValue ) => {
return currentValue > 6;
})) // false // arr.find(callback(element[, index[, array]])[, thisArg])
// find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
console.log(arr.find( (currentValue ) => {
return currentValue > 2;
})) // 3 console.log(arr.find( (currentValue ) => {
return currentValue > 6;
})) // undefined // arr.findIndex(callback(element[, index[, array]])[, thisArg])
// findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引,否则返回-1。
console.log(arr.findIndex( (currentValue ) => {
return currentValue > 2;
})) // 2 console.log(arr.findIndex( (currentValue ) => {
return currentValue > 6;
})) // -1 // arr.filter(callback(element[, index[, array]])[, thisArg])
// filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
console.log(arr.filter( (currentValue ) => {
return currentValue > 2;
})) // [3, 4, 5]

参考

https://blog.csdn.net/function__/article/details/79555301
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

Js遍历数组总结的更多相关文章

  1. 【Javascript】JS遍历数组的三种方法:map、forEach、filter

    前言 近一段时间,因为项目原因,会经常在前端对数组进行遍历.处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在一些坑.前端时间在ediary中总结了js原生自带的 ...

  2. JS遍历数组类型元素

    已停供用户不能再次停供,之前没太处理过多维数组的遍历,趁这个机会回顾一下js数组遍历 可以看出rows 获取了两条数据,为二维数组类型 方法 function batchTgWin() { var r ...

  3. JavaScript的使用以及JS常用函数(JS 遍历数组和集合)

    JavaScript入门 学习总结 1. 什么是 JavaScript 2. JavaScript 的特点 3. JS的使用 编写位置 基本语法 变量 打印变量 数据类型 innerHTML和inne ...

  4. js遍历数组的错误方法

    for (var index in myArray) { // don't actually do this console.log(myArray[index]); } 缺点: 数组的索引值inde ...

  5. js遍历数组和遍历对象的区别

    <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...

  6. js遍历数组对象和非数组对象

    //---------for用来遍历数组对象 var i,myArr = ["a","b","c"]; ; i < myArr.len ...

  7. js 遍历数组

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  8. js遍历数组和遍历对象

    可以用for in来遍历对象,具体内容如下: <script type="text/javascript">             var objs = {      ...

  9. js遍历数组和数组对象

    <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...

随机推荐

  1. python自动化工具

    公司有些业务不断的重复复制和黏贴实在让人头疼,于是乎考虑使用python自动的生成文件,并且替换文件中的一些内容,把需要复制和黏贴的内容制作成 模版,以后的开发工作可以根据模版来自动生成文件,自己以后 ...

  2. java的23种设计模式之建造者模式

    场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...

  3. MDEV入门

    ------------- MDEV入门------------- 对于我们这些人知道如何使用的mdev ,底漆可能似乎跛.为其他人的mdev是一个神秘的黑匣子,他们听到的是真棒,但不能似乎得到他们的 ...

  4. 烘焙ID贴图

    ID贴图(ID Map)的作用主要就是用来区分同一个模型中不同的区块,具体的用法查看此文.下面介绍几种不同的方式来烘焙ID贴图,用到的工具分别是Blender和Substance Painter. 在 ...

  5. Flutter调研(2)-Flutter从安装到运行成功的一些坑

    工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置. —— 在mac ...

  6. 通过python脚本读取多台虚机硬件信息

    主要通过fabric模块实现 import fabric ''' hosts = [] ,): host = "192.168.75." + str(i) hosts.append ...

  7. Java基础:浅谈数据输入流/数据输出流《DataInputstream类与DataOutputstream类》

     一.理论概述 数据输入/输出流(DataInputStream类与DataOutputStream类) 允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型. 说白了就是,当读取一个 ...

  8. hw从外网到内网的渗透姿势分享

    现在这段时间是全员 hw 时期,刚好前几天也有幸参与了某个地方的 hw 行动,作为攻击方,这里就简单总结一下最近挖洞的思路吧.因为可能怕涉及到敏感的东西,这里就有的地方不会细说了. 因为本人比较菜,所 ...

  9. tomcat服务器和http协议笔试题

    tomcat与web程序结构与Http协议与HttpUrlConnection 考查的知识点:tomcat服务器相关信息 1.下面关于tomcat服务器描述正确的是() (难度A) A. tomcat ...

  10. Python -Selenium的安装和调用

    安装selenium步骤: 1.安装pip(cmd命令行管理员方式): pip install pip 也可直接搜索pip,到官网下载安装 2.安装selenium(cmd命令行管理员方式): pip ...