filter() 方法创建一个新的数组,对每个元素遍历,符合条件则可以返回,不符合就过滤掉。
接收两个参数,一个是函数,返回一个布尔类型的值,决定元素是否保留,一个是函数的this指向(类似map方法);
// 1、筛选普通数组----------------------------------
const array = [1, 2, 3, 4]
const obj = { name: 'tom' }
const temp = array.filter(function(el, index, arr){ // 当前对象, 索引, 总数组对象
console.log(this) // {name: "tom"}
console.log(this.name) // tom
el = 3 // 赋值无效
return el > 2
}, obj)
console.log(temp) // [3, 4]
// 2、筛选对象数组----------------------------------
const array = [{name: 'tom', age: 12},{name: 'jack', age: 16}]
const temp = array.filter(el => { // 当前对象, 索引, 总数组对象
console.log(this) // window
el.name = 'rose' // 可以改变数组的属性值
return el.age > 13 // 符合条件则返回当前元素
})
console.log(temp) // [{name: "rose", age: 16}]
console.log(array) // 改变原对象数组 [{name: 'rose', age: 12},{name: 'rose', age: 16}]
注意点:
1、filter可以改变数组长度,可以修改对象数组属性的值,不能修改普通数组的值;
2、不对空数组校验,但返回的是空数组