JavaScript Array对象的filter方法详解

本文详细解析了JavaScript中Array.filter()方法的语法及参数,通过具体示例展示了如何使用filter进行数组元素过滤,包括条件判断、正则表达式匹配等,并介绍了在Vue项目中如何利用filter优化列表渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Filter语法

array.filter(function(currentValue,index,arr), thisValue)

参数描述
function(currentValue,index,arr) 必选项,每个filter都需要一个回调函数用来写过滤的逻辑
参数描述
currentValue必选参数,指向的是原数组中的当前项
index可选项,顾名思义就是当前项[currentValue]的索引
arr可选项,指向的是原数组,是原数组的一个副本
thisValue可选项,该对象在执行回调函数[function(currentValue,index,arr)]中使用,指向"this"指针,在回调中使用this可访问此对象

Filter语法实例

这里笔者写了一个使用所有参数的例子,并在注释中注明了用法,供参考:

//等待过滤的数组
var users = [
 {
  id : 1,
  name : 'lbx',
  age : 10
 },
 {
  id : 2,
  name : 'angellover',
  age : 20
 },
 {
  id : 3,
  name : 'angel',
  age : 12
 },
 {
  id : 4,
  name : 'ads',
  age : 15
 }
]
//RegExp对象
var patt = /ang/
//此对象将作为filter的thisValue参数传递,注意下面的用法
var usera = {
  id : 5,
  name : 'log',
  age : 13
 }
var usersA = users.filter(function(user,index,arr){
/*
 * 这里的过滤逻辑是 
 * age大于10  
 * 从数组的索引大于1
 * name中匹配到 /ang/
 * age小于13  this指向的就是usera对象
*/
 return user.age>10 && index>1 && patt.test(arr[index].name) && user.age<this.age
},usera);
console.log(usersA)

按照这样的逻辑我们可以看到,执行的结果集中就只有一条:
在这里插入图片描述

VUE中列表过滤时使用Filter

由此引申至VUE项目中的一个场景,当我们需要渲染一个列表中的某些特定的项时,我们可以通过在计算属性中返回过滤后的列表来渲染,实例如下:

以下实例引用在vue官方风格指南 https://cn.vuejs.org/v2/style-guide/#避免-v-if-和-v-for-用在一起-必要

//把列表过滤放到计算属性中去
computed: {
  activeUsers: function () {
    return this.users.filter(function (user) {
      return user.isActive
    })
  }
}
//这里直接渲染计算属性返回的列表即可
<ul>
  <li
    v-for="user in activeUsers"
    :key="user.id"
  >
    {{ user.name }}
  </li>
</ul>

这种方式相比在模板中使用v-if的最大的好处就在于,把过滤的逻辑放到数据层面控制,方便维护,解耦代码。更多关于这里的风格指南可以看官方网站上的讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angelavor

觉得有收获,给我个三连吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值