注意:
1、以下5个方法的参数都一样,第一个是回调函数,第二个参数是改this指向。
2、用箭头函数的语法要注意一下:this指向的是当前定义函数所在的对象!!!
一、 arr.forEach(),代替普通for循环,形式更简单
和for循环区别 :
- 1.在固定长度或长度不需要计算的时候for循环效率高于foreach.
- 2.在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便.
- 3.并且foreach的时候会锁定集合中的对象.期间不能修改.
- 4.for 循环每次循环会调用 GetCount() 来比较长度. 而 foreach 不考虑长度,只调用一次GetList().
let arr = ['苹果','香蕉','橘子'];
arr.forEach(function(val,index){
console.log(val,index) //苹果 0 香蕉 1 橘子 2
})
二、 arr.map():“映射”,原数组被“映射”成对应新数组。
非常有用,做数据交互‘映射’。正常情况下,需要配个return,返回的是一个新的数组,如果没有return,就相当于forEach。
注意:一定要用return
let arr = [
{title : 'aaa',read : 100,hot : true},
{title : 'bbb',read : 200,hot : false},
{title : 'ccc',read : 300,hot : true},
{title : 'ddd',read : 400,hot : true},
];
let newArr = arr.map((item,index)=>{
let json = {};
json.t = item.title;
json.r = item.read;
return json
})
console.log(newArr) //[{'t':'aaa',r:100},{}....]
三、arr.filter():“过滤”、“筛选”.返回过滤后的新数组。如果回调函数返回true,就留下来
let arr = [
{title : 'aaa',read : 100,hot : true},
{title : 'bbb',read : 200,hot : false},
{title : 'ccc',read : 300,hot : false},
{title : 'ddd',read : 400,hot : true},
];
let newArr = arr.filter((item,index)=>{
return item.hot
})
console.log(newArr) // [{title : 'aaa',read : 100,hot : true},{title : 'ddd',read : 400,hot : true}]
四、 arr.some():是否“某些项”合乎条件。返回true,与下面的every算是好基友。
let arr = [
{title : 'aaa',read : 100,hot : true},
{title : 'bbb',read : 200,hot : false},
{title : 'ccc',read : 300,hot : false},
{title : 'ddd',read : 400,hot : true},
];
let newArr = arr.some((item,index)=>{
return item.hot
})
console.log(newArr) // true
五、 arr.every():返回Boolean值,必须每一项都符合条件
六、arr.reduce()
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
七、arr.reduceRight():从右到左
八、for...of
- 这是最简洁、最直接的遍历数组元素的语法
- 这个方法避开了for-in循环的所有缺陷
- 与forEach()不同的是,它可以正确响应break、continue和return语句
let arr = ['苹果','梨','香蕉'];
for (const key in arr) {
console.log(arr[key])
}