整理JavaScript循环数组和对象的方法
众所周知,常用的循环语句有for、while、do-while、for-in,forEach以及jQuery中提供的循环的方法;以及ES6中提供的很多用来循环对象的方法如map,
在 Javascript 中,当某些条件得到满足时,用 break 语句来中断一个循环的运行。(请注意,也用 break 语句退出一个 switch 块。参见 Javascript 条件语句)。如果是一个 for 或者 for...in 循环,在更新计数器变量时使用 continue 语句越过余下的代码块而直接跳到循环的下一次重复中。
//数组长度
let len = 200; //准备测试数组
let arr = new Array();
for (let i = 0 ; i < len; i++){
arr.push("abc"+i);
}
第一部分:循环数组的方法
1、for循环
//正向for循环
for(let i = 0, len = arr.length; i < len; i++){
let value = arr[i];
}
//反向for循环
for(let i = arr.length; i > 0; i--){
let value = arr[i];
}
2、while循环
let i = 0;
let len = arr.length;
while(i < len){
let value = arr[i];
i++;
}
3、do-while循环
let i = 0;
let len = arr.length;
do{
let value = arr[i];
i++;
}while(i < len);
4、for-in循环
//循环数组时for-in循环相对性能很差,其主要用于循环对象。
for(let item in arr){
let value = item;
}
5、forEach方法
//这个方法执行是没有返回值的,对原来数组也没有影响;
//forEach方法中的this是原数组,匿名回调函数中的this默认是window;
let res = arr.forEach((val, ind, input)=>{
let value = val; //数组的每一项的值
let index = ind; //数组的索引值
let array = input; //原数组
input[ind] = val*10; //可以改变原数组
})
console.log(arr);//原数组已经改变
console.log(res);//undefined
6、map方法
//map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;
//区别:map的回调函数中支持return返回值;
//return的是什么,相当于把数组中的这一项变为什么
//(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
//不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。
let res = arr.map((val, ind, input)=>{
let value = val; //数组中的每一项的值
let index = ind; //数组的索引
let array = input; //原数组
return val*10; //数组中的每一项return出去为map方法的返回值
})
console.log(arr);//原数组未改变
console.log(res);//原数组改变后的数组
注:不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:
/**
* forEach遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback,context){
context = context || window;
if('forEach' in Array.prototye) {
this.forEach(callback,context);
return;
}
//IE6-8下自己编写回调函数执行的逻辑
for(var i = 0,len = this.length; i < len;i++) {
callback && callback.call(context,this[i],i,this);
}
} /**
* map遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback,context){
context = context || window;
if('map' in Array.prototye) {
return this.map(callback,context);
}
//IE6-8下自己编写回调函数执行的逻辑
var newAry = [];
for(var i = 0,len = this.length; i < len;i++) {
if(typeof callback === 'function') {
var val = callback.call(context,this[i],i,this);
newAry[newAry.length] = val;
}
}
return newAry;
}
7、jQuery中遍历数组的方法$.each()
$.each(arr, (ind, val)=>{
let index = ind;//数组中每一项的索引
let value = val;//数组中每一项的值
})
第二部分:循环对象的方法
//对象中键值对个数
let len = 200; //准备测试数组
let obj = new Object();
for (let i = 0 ; i < len; i++){
obj[`index${i}`] = `value${i}`;
}
1、for-in用来遍历非数组对象
for(let ind in obj){
let index = ind; //对象中的每一项的键名
let value = obj[ind]; //对象中的每一项的值
}
2、jQuery中遍历对象的方法$.each()
$.each(obj, (ind, val)=>{
let index = ind; //对象中每一项的键名
let value = val; //对象中每一项的值
})
3、ES6新提供的对象的遍历方法
(未完待续。。。)
整理JavaScript循环数组和对象的方法的更多相关文章
- JavaScript 循环数组的时候调用方法中包含Promise的时候如何做到串行
forEach是不能阻塞的, 默认[并行]方式 const list = [1, 2, 3] const square = num => { return new Promise((resolv ...
- JavaScript 数组(Array)对象的方法
JavaScript 数组(Array)对象的方法 concat() 描述:用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 原型:arrayObject.conc ...
- 总结Javascript中数组各种去重的方法
相信大家都知道网上关于Javascript中数组去重的方法很多,这篇文章给大家总结Javascript中数组各种去重的方法,相信本文对大家学习和使用Javascript具有一定的参考借鉴价值,有需要的 ...
- javascript常用的Math对象的方法
简介 Math对象是在程序编程中用于执行一些数学任务的.Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数, ...
- JavaScript中遍历数组和对象的方法
js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等 JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3 ...
- javascript中数组的22种方法
× 目录 [1]对象继承 [2]数组转换 [3]栈和队列[4]数组排序[5]数组拼接[6]创建数组[7]数组删改[8]数组位置[9]数组归并[10]数组迭代[11]总结 前面的话 数组总共有22种方法 ...
- JavaScript中数组中遍历的方法
前言 最近看了好几篇总结数组中遍历方法的文章,然而"纸上得来终觉浅",决定此事自己干.于是小小总结,算是自己练手了. 各种数组遍历方法 数组中常用的遍历方法有四种,分别是: for ...
- javascript中数组的22种方法 (转载)
前面的话 数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详 ...
- JavaScript中创建自定义对象的方法
本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构 ...
随机推荐
- springboot自定义错误页面
springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { re ...
- linux安装扩展总结
---恢复内容开始--- 1.安装php 模块安装命令. wget http://pear.php.net/go-pear 执行 php go_pear 如果是php7 wget http://pea ...
- Android 开发工具类 04_KeyBoardUtils
打开或关闭软键盘: 1.打卡软键盘: 2.关闭软键盘. import android.content.Context; import android.view.inputmethod.InputMet ...
- [转] TCP/IP原理、基础以及在Linux上的实现
导言:本篇作为理论基础,将向我们讲述TCP/IP的基本原理以及重要的协议细节,并在此基础上介绍了TCP/IP在LINUX上的实现. OSI参考模型及TCP/IP参考模型 OSI模型(open syst ...
- Unable to handle kernel NULL pointer dereference at virtual address 00000000问题的解决
今天在编译好内核模块后,安装内核模块memdev.ko的时候,出现了Unable to handle kernel NULL pointer dereference at virtual addres ...
- lintcode-->翻转字符串
给定一个字符串,逐个翻转字符串中的每个单词. 您在真实的面试中是否遇到过这个题? Yes 说明 单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包 ...
- Nodejs学习笔记(十二)—定时任务(node-schedule)
写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非 ...
- EF Core 实现多租户
目录 SAAS 和多租户 多租户数据隔离方案 使用 EF Core 简单实现多租户 单数据库实现 多数据库实现 源代码 参考 SAAS 和多租户 SaaS(软件及服务)区别于其他应用程序的主要特征就是 ...
- [九省联考 2018]一双木棋chess
Description 题库链接 给出一个 \(n\times m\) 的棋盘,棋盘的每个格子有两个权值 \(A,B\) . Alice 和 Bob 轮流操作在棋盘上放棋子,一个格子能放棋子的前提条件 ...
- UIKit 框架之UITableView一
UITableView在开发中是用的最多的控件,它包含两个代理:UITableViewDataSource,UITableViewDelegate,先熟悉下API 1.初始化 - (instancet ...