数组遍历 map()、forEach() 及 字符串切割 split() / 字符串截取 slice()、substring()、substr()
JS数组遍历的几种方式
JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比
第一种:普通for循环
代码如下:
for(j = 0; j < arr.length; j++) { }
简要说明:
最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间
第二种:优化版for循环
代码如下:
for(j = 0,len=arr.length; j < len; j++) { }
简要说明:
使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。
这种方法基本上是所有循环遍历方法中性能最高的一种
第三种:弱化版for循环
代码如下:
for(j = 0; arr[j]!=null; j++) { }
简要说明:
这种方法其实严格上也属于for循环,只不过是没有使用length判断,而使用变量本身判断
实际上,这种方法的性能要远远小于普通for循环
第四种:foreach循环
代码如下:
var arr = ['a','b','c','d','e','f'];
arr.forEach(function(value,index,array) {
console.log(value + '=' + array[index]); // a=a b=b c=c d=d e=e f=f
});
简要说明:
数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱
第五种:foreach变种
代码如下:
var arr = ['a','b','c','d','e','f'];
Array.prototype.forEach.call(arr,function(value,index,array){
console.log(value + '=' + array[index]); // a=a b=b c=c d=d e=e f=f
});
简要说明:
由于foreach是Array型自带的,对于一些非这种类型的,无法直接使用(如NodeList),所以才有了这个变种,使用这个变种可以让类似的数组拥有foreach功能。
实际性能要比普通foreach弱
第六种:forin循环
代码如下:
var arr = ['a','b','c','d','e','f'];
for(j in arr) {
console.log(j); // 0 1 2 3 4 5
}
简要说明:
这个循环很多人爱用,但实际上,经分析测试,在众多的循环遍历方式中
它的效率是最低的
第七种:map遍历
代码如下:
var arr = ['a','b','c','d','e','f'];
arr.map(function(value,index,array) {
console.log(value + '=' + array[index]); // a=a b=b c=c d=d e=e f=f
});
简要说明:
这种方式也是用的比较广泛的,虽然用起来比较优雅,但实际效率还比不上foreach
第八种:forof遍历(需要ES6支持)
代码如下:
var arr = ['a','b','c','d','e','f'];
for(let value of arr) {
console.log(value); // a b c d e f
};
简要说明:
这种方式是es6里面用到的,性能要好于forin,但仍然比不上普通for循环
各种遍历方式的性能对比
for in 循环最慢。优化后的普通for循环最快
注:jquery 的 $.each(arr,function(index,value){}) 和 $.map(arr,function(index,value){}) 的第二个参数和第一个参数是反过来的
例如:
// each处理一维数组
var arr1 = [ "aaa", "bbb", "ccc" ];
$.each(arr1, function(i,val){
alert(i);
alert(val);
});
// 处理json数据,例如ajax的返回值
var obj = { one:1, two:2, three:3};
$.each(obj, function(key, val) {
alert(key);
alert(val);
});
$.map() 与 $.each() 的区别
注:$.map()有返回值,可以return 出来,$.each()没有返回值。
例如:
// $.map(arr,fn);
// 对数组中的每个元素调用fn函数逐个进行处理,fn函数将处理返回最后得到的一个新的数组
var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1];
var newarr = $.map(arr, function (item,index,array) { return item * 2 });
alert(newarr);
// $.each(array,fn)对数组array每个元素调用fn函数进行处理,没有返回值
var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1];
$.each(arr, function (key, value) { alert("key:" + key + "value:" + value); });
// 还可以省略function的参数,这个时候this可以得到遍历的当前元素的值
var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1];
$.each(arr, function () { alert(this); });
JS字符串切割的方式
第一种:split()
说明:
使用一个指定的分隔符把一个字符串分割存储到数组
实例:
var str = 'a,b,c,d,e,fg';
console.log(str.split(",")); // ["a", "b", "c", "d", "e", "fg"]
JS字符串截取的几种方式
第一种:slice()
说明:
第一个参数代表开始位置,第二个参数代表结束位置的下一个位置,截取出来的字符串的长度为第二个参数与第一个参数之间的差;若参数值为负数,则将该值加上字符串长度后转为正值;若第一个参数等于大于第二个参数,则返回空字符串.
实例:
var str = 'abcdefg';
console.log(str.slice(1,3)); // bc
第二种:substring()
说明:
第一个参数代表开始位置,第二个参数代表结束位置的下一个位置;若参数值为负数,则将该值转为0;两个参数中,取较小值作为开始位置,截取出来的字符串的长度为较大值与较小值之间的差.
实例:
var str = 'abcdefg';
console.log(str.substring(1,3)); // bc
第三种:substr()
说明:
第一个参数代表开始位置,第二个参数代表截取的长度
实例:
var str = 'abcdefg';
console.log(str.substr(1,3)); // bcd
.
数组遍历 map()、forEach() 及 字符串切割 split() / 字符串截取 slice()、substring()、substr()的更多相关文章
- 字符串截取slice() substring() substr()的区别?
获取子字符串 slice() substr() substring() 不会修改字符串本身,他们只是返回一个基本类型的字符串值 var str='abcdefghijklmn'; ...
- 数组遍历方法forEach 和 map 的区别
数组遍历方法forEach 和 map 的区别:https://www.cnblogs.com/sticktong/p/7602783.html
- 字符串截取函数slice, substring, substr
在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr.我们怎么判断在什么时候 ...
- 数组遍历for forEach for..in for..of
最开始接触的遍历for 通过下标获取数组每一项的值 ,,]; ;i<num.length;i++) { console.log(num[i]) } /*打印2 5 7*/ forEach遍历数组 ...
- 数组遍历map和each使用
<body> <input type="/> <input type="/> <input type="/> </b ...
- js高级-数组的map foreach 方法
函数式编程 sort map forEach .... jQuery() 数组的sort 方法 传入一个匿名函数 就是函数式编程 ie9 以上的浏览器支持 map 方法 map方法 返回一个新数 ...
- JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别
String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...
- js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this
内置对象: 语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in / 打印josn的时候采用for...in Date 获取当前事件: var date = ...
- JS字符串截取函数slice(),substring(),substr()的区别
在JS中,slice().substring().substr()都有截取字符串的作用,那他们有哪些用法上的区别呢?如果你也有疑惑,这篇文章或许能够帮助到你. 一.substring() substr ...
随机推荐
- python爬虫(爬取段子)
python爬取段子 爬取某个网页的段子 第一步 不管三七二十一我们先导入模块 #http://baijiahao.baidu.com/s?id=1598724756013298998&wfr ...
- opencv中的各种滤波设计
这篇文章写得太好了 ,感觉自己实在没有办法去补充这方面的知识点 我打算把高斯滤波和双边滤波还好好补充下 这篇文章转载自一个美丽的才女:小魏 连接地址:http://blog.csdn.net/xia ...
- 《C/C++专项练习》— (1)
前言 每每到了一周之计的Monday啊,精神总是不佳,写篇博客提提神儿吧~ 继上次完成<C/C++工程师综合练习卷>后,有事儿没事儿就想刷几道题,赶脚不错,巩固了不少基础知识呢,要坚持哦~ ...
- stm32单片机的C语言优化
对于有些单片机,自身容量是很有限的,有的仅仅只有8k.16k的flash等,但是对32位mcu来说,这点空间实在有点小.不像计算机一样内存和rom都很多,因此有时候就需要进行代码优化.大家都知道,单片 ...
- DFS:POJ1562-Oil Deposits(求连通块个数)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Description The GeoSurvComp geologic survey com ...
- poj 3783
Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1196 Accepted: 783 Description ...
- adb 常用命令详解
1.把电脑上文件或目录copy到手机中:adb push <local> <remote> - copy file/dir to device 此处的<local& ...
- jmeter历史版本下载
https://archive.apache.org/dist/jmeter/binaries/
- 【编程工具】Sublime Text3 之 Emmet 插件的详细使用的方法
这篇关于 Emmet 插件使用的博文之前就想写了,今天刚好闲暇时间,就花了一些时间进行了总结. 我们都这道 Emmet 这款插件在前端设计里被称为神器,确实,神器称号名不虚传.因为这款插件可以帮助我们 ...
- shell-001
for: shell_test #!/bin/bash var= var=$var+ echo $var mkdir only_a_joke shell_joke #!/bin/bash ./shel ...