ES5
数组的遍历方式
- for循环
- forEach() :没有返回值,针对每个元素调用func,循环中途无法跳出。(参数:一个方法(方法里的参数:element,index,array))
- map() :返回新的Array(由每轮循环的返回值组成),每个元素为调用func的结果。(参数:一个方法(方法里的参数:element,index,array))
- filter() :返回符合func条件的元素数组。(参数:一个方法(方法里的参数:element,index,array))关于filter需要注意的是,每次遍历的时return的是一个布尔值而不是具体数值,当布尔值为true时才会把当前元素加入到结果的数组中
- 需要注意的是,0 | -0 / null / undefined / ’ ’ / NaN 返回false其余都为true,-1/-2负数都为true(负数是true哦)
比如以下代码,最终还是会返回一个正常的数字型数组。
const arr = [5,5,4,2,4,4,2,6,1]
const arr_filter = arr.filter((element,index,array) =>{
return index>3;
})
再比如这个例子,虽然我对element进行了修改,但是得到的是原值(修改后的值组成的数组是map该干的事情)
const arr2 = [0,1,2,-1]
const arr_filter1 = arr2.filter((element,index,array) =>{
if(element<0)return element+2;
})
console.log(arr_filter1);
-
some() :返回波尔值。(参数:一个方法(方法里的参数:element,index,array))
-
every() :返回波尔值。(参数:一个方法(方法里的参数:element,index,array))
-
reduce() :返回最终值。接收一个函数作为累加器,有很多用法也可以用来比大小。(参数:一个方法(方法里的参数:上一次的返回值,当前元素,当前索引,原数组),初始值(可以是数值也可以是个数组甚至对象))
-
for in :一般用于遍历对象,遍历数组会把原型中的方法也遍历出来。
ES6
数组的遍历方式
- find() :返回第一个符合的元素。(参数:一个方法)
- findIndex() :返回第一个符合元素的下标。(参数:一个方法)
- for of :遍历数组。注意方法values(),keys()和entries()。
arr.entries()
其他方法
- Array.from() :把伪数组转化为数组。
- Array.of() :new Array.of()可以和 new Array()互替。括号中永远为传入的元素。(new Array()则在参数一个的时候是长度)
- copyWithin() :替换数据。(参数:替换位置,新数据来源起始位置,新数据来源结束位置(可不填))
- fill() :填充数据。(参数:填充内容,起始位置,结束位置)起始和结束不填就全部填充。
copeWithin()是原数组中已有元素来替换,fill()是自己定的数据
ES7
includes()
参数(搜索元素,搜索起始位置(可选))
返回一个布尔型的值,判断数组是否包含该对象。
起始位置正向从0开始,逆向从-1开始。
对比indexOf()
参数(搜索元素)
返回位置,没有就返回-1.
注意:
1、这两个都只能判断基本数据类型。
2、includes()可以检测NaN,indexOf()不可以。
3、都是严格的(===),不会进行类型转化。
ES10
数组的扁平化操作。就是把多维数组转为一位数组。
const arr = [1,2,3,[4,5,6,[7,8,9]]]
flat()
参数(深度),默认为1。 可以使用Infinity,无限的意思
拍平一级。
arr拍平一级变为[1,2,3,4,5,6,[7,8,9]]
flatMap()
相当于是map()和flat()的结合,既能遍历数组又能对结果进行扁平化操作。