原文是掘金看到的,非常好,作为学习笔记记录下来。https://juejin.im/post/5a5f3eaf518825733201a6a7
filter为数组中的每个元素调用一次callback函数,并利用所有使得“callback返回true或等价于true的值的元素”,创建一个新的数组。
var new_array = arr.filter(callback[,thisArg])
基础用法:
var spread = [12,5,6,130,44]
//筛选条件符合大于10的新数组
var filtered = spread.filter(n=>n>=10)
console.log('filtered',filtered)//=>[12,130,44]
进阶用法:
数组对象的键名/键值搜索
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'ared', 'age': 24, 'active': false },
{ 'user': 'ered', 'age': 80, 'active': false },
{ 'abc': 'ered', 'age': 80, 'active': false }
]
// 筛选 age等于40或者age等于24的 数组对象
var filtered = users.filter(n => n.age===40 || n.age===24)
console.log('filter后的键名', filtered)
// => [{user: "fred", age: 40, active: false},{user: "ared", age: 24, active: false}]
高阶用法:
(1)数组去重
var spread = [12,5,8,8,130,44,130]
var filtered = spread.filter((item,idx,arr) => {
return arr.indexOf(item) === idx;
})
// 筛选符合条件找到的第一个索引值等于当前索引值的数组
console.log('数组去重结果',filtered)
现在数组去重有ES6的新语法Set方法来解决更方便
var spread = [12,5,8,130,44,130]
var setFun = [...new Set(spread)]
console.log('数组去重结果',setFun)
字符串去重方法
var arr = [12,5,8,8,130,44,130,'a','b','a']
var obj = {}
arr.forEach(function(item){
obj[item]=item;
})
Objeck.keys(obj)
cosole.log(Object.keys(obj))
数组中的空字符串删掉
var spread = ['A','','B',null,undefined,'C',' ']
var filtered = spread.filter((item,idx,arr) => {
return item && item.trim()
})
cosole.log('数组中的空字符串删掉',filtered) //=>['A','B','C']
充分利用callback返回true的特点当做“过滤条件”函数,产生新的数组