方法的总结
最近在开发项目的时候,一直在频繁的操作数组,对于一些数组的方法的区别还不是很熟悉,在这里手写记录下来,加强记忆。主要是包含四组(find、filter),(every、some),(map、forEach),(splice、slice)方法,也顺便记录一下他们之间的区别。
find和filter方法
1. find()方法
find()方法是找到数组中第一个符合条件(条件由传入的函数指定)的元素,找到之后遍历的过程即结束,不会再执行,返回值是这个元素;当整个数组没有符合条件的元素时,返回undefined。
let arr = [1,2,3,4,5]
let res1 = arr.find(ele=>ele>3}) //返回arr中大于3的第一个数
let res2 = arr.find(ele=>ele>5}) //返回arr中大于5的第一个数
console.log(res1) // 4
console.log(res2) // undefined
2. filter()方法
filter()方法是找到数组中所有符合条件的元素,并且将这些元素放在一个新的数组中作为返回值,如果没有符合条件的元素,则返回一个空数组。
let arr = [1,2,3,4,5]
let res1 = arr.filter(ele=>ele>3}) //返回arr中大于3的所有的数
let res2 = arr.find(ele=>ele>5}) //返回arr中大于5的所有的数
console.log(res1) // [4,5]
console.log(res2) // []
3. 异同点
- 相同点:两个方法都不会对空数组进行检测;两个方法都不会改变原数组。
- 不同点:返回值不同,find()返回的是数组中的一个元素,而filter()返回的是一个数组;find()不一定会遍历整个数组,更节省性能,而filter会遍历整个数组。
every和some方法
1. every()方法
every()方法用来检测数组中的元素是否都符合某个条件,返回值是布尔值,当所有的元素都符合条件时,返回true,但是只要有一个不符合条件,遍历的过程立刻终止并且返回false。
let arr = [1,2,3,4,5]
let res1 = arr.every(ele=>ele>0}) //检测数组中的值是否都大于0
let res2 = arr.every(ele=>ele>5}) //检测数组中的值是否都大于5
console.log(res1) // true
console.log(res2) // false
2. some()方法
some()方法与every()方法刚好相反,用来检测数组中是否有符合条件的元素,若有,则遍历终止,返回true,若所有的元素都不符合条件,则返回false。
let arr = [1,2,3,4,5]
let res1 = arr.some(ele=>ele>3}) //检测数组中的值是否有值大于3
let res2 = arr.some(ele=>ele>5}) //检测数组中的值是否有值大于5
console.log(res1) // true
console.log(res2) // false
3. 异同点
- 相同点:两个方法都不会对空数组进行检测;返回值都是布尔值;都不会改变原数组。
- 不同点:当空数组调用every()方法的时候,永远都会返回true,而调用some()时,总是返回false。
let arr = []
let res1 = arr.some(ele=>ele>1)
let res2 = arr.every(ele=>ele>1)
console.log(res1) // false
console.log(res2) // true
map和forEach方法
1. map()方法
map()方法遍历数组为每个元素都执行回调函数,返回值是执行回调之后的元素组成的数组,但是它并不会改变原数组。
let arr = [1,2,3,4,5]
let res = arr.map(ele=>ele+3}) //让每个元素都加3
console.log(res) // [4,5,6,7,8]
console.log(arr) // [1,2,3,4,5]
2. forEach()方法
forEach()方法遍历数组,可以传一个回调函数,让每个元素都执行相应的操作,需要注意的是空数组调用是不会执行回调的,方法并没有返回值。所以如果只是需要为数组中的每个元素执行某个操作而遍历数组,推荐使用foreach而不是map。
let arr = [1,2,3,4,5]
let res = arr.forEach(ele=>ele+3}) //让每个元素都加3
console.log(res) // undefined
console.log(arr) // [4,5,6,7,8]
3. 异同点
- 相同点:都会遍历整个数组并且数组中的每个元素都会执行回调函数;都不会检测空数组。
- 不同点:map有返回值,而forEach没有;map不会改变原数组,而forEach是可以改变的。
splice和slice方法
1. splice()方法
splice()方法从数组中添加/删除元素,如果删除的话,会返回被删除的元素组成的数组,可接收两个及以上参数,第一个是元素的索引值,规定方法执行的起点,必传;第二个是要删除的个数,如果是0,则不会删除元素,必传;第三个是可选参数,可以为多个,是要向数组中添加的元素。splice() 方法可删除从 起点处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
let arr = [1,2,3,4,5]
let res = arr.splice(1,2) //从索引为1的地方删除2个元素
console.log(res) // [2,3]
console.log(arr) // [1,4,5]
let arr = [1,2,3,4,5]
let res = arr.splice(1,2,7,8) //从索引为1的地方删除2个元素,并用7,8替换
console.log(res) // [2,3]
console.log(arr) // [1,7,8,4,5]
2. slice()方法
slice()方法接收两个参数start,end,从数组中返回索引从start到end的元素组成的新数组,但是不包括end这个元素。如果不指定end,则返回从start开始之后的所有元素。slice不会改变原数组。
let arr = [1,2,3,4,5]
let res = arr.slice(2,4) //返回索引在2到4的元素
console.log(res) // [3,4]
console.log(arr) // [1,2,3,4,5]
3. 异同点
- 相同点:都可以返回指定的元素
- 不同点:splice会改变原数组,用法相对灵活,slice不会改变原数组,只能返回指定的元素。