<script type="text/javascript">
/*对比:
1、map速度比foreach快
2、map会返回一个新数组,不对原数组产生影响,foreach不会产生新数组,foreach返回undefined
3、map因为返回数组所以可以链式操作,foreach不能
4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错*/
/*方法一:*/
var arr1 = [1, 2, 3, 4, 5, 6];
for(var i = 0, len = arr1.length; i < len; i++) { //优化性能处理
console.log(arr1[i], 'for遍历出来的数据'); //每个item 1,2,3,4,5,6
}
/*方法二:*/
/*forEach方法中的function回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身*/
var arr2 = [{
name: 'bob',
age: 20
},
{
name: 'tom',
age: 18
},
{
name: 'sos',
age: 19
}
]
arr2.forEach((val, i) => { //没有返回值的,对原来数组也没有影响
console.log(val, '遍历出来的每个obj')
});
/*方法三:*/
var fruits = [1, 2, 3, 4, 5, 6, 7, 8];
let arr = fruits.map((item, index) => {
console.log(item, 'top')
console.log(index, 'top')
return item * 8
})
console.log(arr, 'newarr') //[8, 16, 24, 32, 40, 48, 56, 64] "newarr"
var a = fruits.indexOf("Apple", 4);
console.log(a)
//for 和 forEach都是普通循环,map 带返回值并且返回一个新数组;
/*
*当前元素的值,当期元素的索引值,当期元素属于的数组对象;
语法:array.map(function(currentValue,index,arr), thisValue)
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
* */
/*方法四:*/
/*兼容写法:
不管是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;
}
</script>

最新文章

  1. 【JavaScript忍者秘籍】定时器
  2. MySQL5.6安装步骤
  3. Java数据库——ResultSet接口
  4. URL编码表%20Base64编码表%20HTTP消息含义
  5. 安装Ifconfig
  6. Hibernate.initialize(Obj)用法
  7. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
  8. jquery uploadify 进入页面请求两次问题解决办法。
  9. Gartner报告:多数CIO还未对数字化做好准备
  10. 第四讲:hibernate 的session (二)
  11. boost库----enable_shared_from_this类的作用和实现原理
  12. Websense更名换帅
  13. UVa 11426
  14. 自动识别移动端还是PC端
  15. 蜕变成蝶~Linux设备驱动中的并发控制
  16. flutter登录页部分内容
  17. 记一次Java Core Dump分析过程
  18. Netty入门(3) - ChannelHandler
  19. Android的设计尺寸
  20. X240 Ubuntu18.04安装流水帐

热门文章

  1. I.MX6 不一定要设置BOOT_MODE进入烧录模式
  2. 频繁GC会造成卡顿
  3. 「LuoguP3369」 【模板】普通平衡树 (用vector乱搞平衡树
  4. css画三角的原理
  5. c#操作rabbitmq
  6. 整体二分 HDU - 5808
  7. mysql连接过多-报错
  8. (转载) 上传文件进度事件,进度事件(Progress Events)
  9. 解决Excel打开UTF-8编码CSV文件乱码的问题
  10. Thirft 客户端等待时间