<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>
原文地址:https://www.cnblogs.com/lhl66/p/9098126.html
时间: 2024-11-08 20:47:16