JS数组过滤 简单------->多条件筛选

2023-11-10

在前端部分完成筛选功能,一次拿到所有数据,然后根据条件筛选。通常情况下筛选是后台给接口,在数据量不大的情况下,也有人可能会遇到前端筛选这样的情况

// 这个是例子中的被筛选数组
var aim = [
    {name:'Anne', age: 23, gender:'female'},
    {name:'Leila', age: 16, gender:'female'},
    {name:'Jay', age: 19, gender:'male'},
    {name:'Mark', age: 40, gender:'male'}
]

单条件单数据筛选:

根据单个名字筛选,用filter方法,判断name是否为目标名字即可

// 根据单个名字筛选
function filterByName(aim, name) {
    return aim.filter(item => item.name == name)
}
// 输入 aim 'Leila' 期望输出为 [{name:'Leila', age: 16, gender:'female'}]
console.log(filterByName(aim,'leila'))

单条件多数据筛选:

根据多个名字筛选,这里是用for循环遍历目标数组,然后用find方法找到后push到结果数组里,用find方法是重名情况下也能得到想要的结果。for循环可以用数组的一些遍历方法替代,代码可以更简化,示例就是大概表达个意思。

// 根据多个名字筛选
function filterByName1(aim, nameArr) {
    let result = []
    for(let i = 0; i < nameArr.length; i++) {
        result.push(aim.find(item => item.name = nameArr[i]))
    }
    return result
}
// 输入 aim ['Anne','Jay'] 
//期望输出为 [{name:'Anne', age: 23, gender:'female'},{name:'Jay', age: 19, gender:'male'}]
console.log(filterByName1(aim,['Leila','Jay']))
// 有BUG 改进后

多条件单数据筛选:

根据单个名字或者单个年龄筛选,用filter方法,判断条件之间是或的关系。

// 根据名字或者年龄筛选
function filterByName2(aim, name, age) {
    return aim.filter(item => item.name == name || item.age == age)
}
console.log(filterByName2(aim,'Leila',19))

多条件多数据筛选:

最初是用了很笨的双for循环去做,发现很慢,而且并没有达到预期的效果。具体的心路历程已经太遥远,简单介绍以下这个筛选算法。

首先是把筛选条件都塞到一个对象里,用object对象的keys方法获取到筛选的条件名,及需要筛选的是哪个条件,是name?age? gender?

然后使用filter方法对目标数据进行筛选,

根据名字和年龄多元素筛选

//根据名字和年龄多元素筛选
export function multiFilter(array, filters) {
  const filterKeys = Object.keys(filters)
  // filters all elements passing the criteria
  return array.filter((item) => {
    // dynamically validate all filter criteria
    return filterKeys.every(key => {
        //ignore when the filter is empty Anne
      if(!filters[key].length) return true
      return !!~filters[key].indexOf(item[key])
    })
  })
}
/*
 * 这段代码并非我原创,感兴趣的可以去原作者那里点个赞
 * 作者是:@author https://gist.github.com/jherax
 * 这段代码里我只加了一行,解决部分筛选条件清空时候整体筛选失效的问题
 */

var filters = {
    name:['Leila', 'Jay'],
    age:[]
}
/* 结果:
 * [{name: "Leila", age: 16, gender: "female"},
 *  {name: "Jay", age: 19, gender: "male"}]
 */

例如这里,判断每条数据的name值是否在filters.name数组里,是的话返回true,判断filters.age是空数组的话直接返回true,空数组是模拟了age条件被清空的情况,我们仍然能得到正确的筛选数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS数组过滤 简单------->多条件筛选 的相关文章

  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • 从 Internet Explorer 打印时的默认文件名

    使用 pdf 打印机打印网页 将页面另存为 pdf 时 Chrome 和 Firefox 都使用该页面
  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • Bootstrap 标签栏平滑移动导航按钮

    我有一个用于切换块的普通引导选项卡面板 在导航中切换块时 活动选项卡会突出显示 但现在 当我单击活动选项卡的背景时 它会立即发生变化 是否可以使切换选项卡时背景不会立即改变 而是根据需要哪个选项卡而平滑地左右移动 这可以用以下方法完成吗cs
  • HTML 和 标签有什么区别?

    HEAD 标签和 BODY 标签有什么区别 大多数 HTML 书籍仅 简短 提及 and 标签 但它们消失得很快 它们会影响浏览器呈现网页的方式吗 另外 它们会影响 javascript 的运行顺序吗 我的意思是 如果我里面有一个javas
  • 调用类实例方法 onclick javascript

    我有一个 javascript 文件 其中包含包含方法函数的类 我想知道如何从 onClick 事件调用类实例方法 function MyClass this instanceData Display Me this DisplayData
  • 需要参数的addEventListener(和removeEventListener)函数

    我需要向 8 个对象 手掌 添加一些侦听器 这些对象是相同的 但行为必须根据它们的位置而改变 我有以下 丑陋的 代码 root palmsStatus B B B B B B B B if root palmsStatus 0 N root
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • “require(...)”是常见的 JavaScript 模式还是库函数?

    我通常发现这是 node js 脚本 模块以及 phantomJS casperJS 等中的第一行 我很好奇 这是否是服务器端 javascript SSJS 的常见模式 类似于 include在 C C 中或import在 Java 中
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • 如何在具有相同值的下拉菜单上触发 jQuery 更改事件

    即使用户选择相同的值 如何每次都触发 jQuery 更改事件 我需要刷新效果 例如如果用户选择Lawyer它会发出警报hello然后用户再次选择Lawyer从下拉菜单中 它应该发出警报hello 我怎样才能实现它 以下是代码 jQuery
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • 嵌套 DIV 的类似斑马的 CSS 样式

    我嵌套了 DIV 元素 但我不知道嵌套的级别 我需要每个都有与其父级不同的背景 创建类似斑马的颜色 我只使用两种背景 深色和白色 效果需要类似于在容器中设置奇数和偶数子级的样式 但在我的例子中 子级是嵌套的 我可以使用每个嵌套元素的规则来做
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 选择单选按钮时隐藏/显示 3 个文本框

    我有 2 个单选按钮 选择一个文本框时 我想显示 3 个文本框 并在选择其他文本框时隐藏它 这是代码 这是我的 2 个单选按钮
  • 使用ExternalInterface和IE从JavaScript获取Flash中的当前URL

    我正在尝试获取 Flash 播放器当前所在的 URL 不是 swf 文件的 URL 而是浏览器指向的 URL 到目前为止我已经使用过 var st String ExternalInterface call window location
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字

随机推荐

  • C# GET方式请求时url地址长度超过限制问题解决

    问题分析 一般通过Get方式请求 服务器只能接受url长度不超过2048个字节的请求 问题解决 我们可以将服务器能够接受的最大请求长度设置为100MB 在Web config文件中添加以下配置
  • 自定义MVC框架原理

    目录 一 什么是MVC 1 模型 Model 2 视图 View 3 控制器 Controller 二 自定义mvc核心思想 三 自定义MVC的核心原则 四 三层架构和MVC的区别 1 结构层次不同 2 重点关注不同 3 强调的功能不同 4
  • install Android Studio 1.3 —— VM Acceleration on Linux

    http developer android com tools devices emulator html vm linux Configuring VM Acceleration on Linux Linux based systems
  • 堪称全网最详细的Java八股面试文,面试必备(附答案)

    前言 听一些小伙伴说 近期的面试越来越难了 为了帮大家节约时间 给大家搞来了今年上半年碰到的大厂Java面试题合集 内容非常的全面 耗时半月 终于把牛客网上的互联网大厂Java面试八股文整理成了PDF合集 其中概括的知识点有 java基础
  • virtualenv创建“隔离”的Python运行环境

    Windows 安装mkvirtualenv pip install virtualenv pip install virtualenvwrapper 新建虚拟python环境 1 创建python工程目录 2 创建一个独立的Python运
  • OpenCV教程——Mat对象

    1 Mat对象和IplIamge对象 Mat对象是OpenCV2 0之后引进的图像数据结构 自动分配内存 不存在内存泄漏的问题 是面向对象的数据结构 分为两个部分 头部和数据部分 IplIamge是从2001年OpenCV发布之后就一直存在
  • SpringBoot自学笔记《黑马程序员》

    SpringBoot 文章目录 SpringBoot SpringBoot简介 SpringBoot开发步骤 SpringBoot配置文件 属性配置 YAML格式 YAML读取 多环境配置 配置文件级别 SpringBoot整合junit
  • 20230822 Windows上使用find_package引入OpenCV报错

    报错信息 打开Cmake项目时 find package 报错 Found OpenCV Windows Pack but it has no binaries compatible with your configuration You
  • chipsel语言_未来发行版中可能删除的功能

    未来发行版中可能删除的功能 未来的 Oracle Solaris 软件发行版可能不支持以下功能 LP 打印服务 未来的 Oracle Solaris 发行版可能不包含 LP 打印服务 SPARC 对传统系统的支持 未来的 Oracle So
  • 【华为 OD】

    目录 一 题目描述 二 输入描述 三 输出描述 用例 四 题目解析 五 Java玩法 六 JavaScript玩法 一 题目描述 给定一组数字 表示扑克牌的牌面数字 忽略扑克牌的花色 请按如下规则对这一组扑克牌 进行整理 步骤 1 对扑克牌
  • 备份技术

    备份技术 备份技术是灾难恢复技术的一个基础 没有使用备份技术进行全面 及时以及准确的备份 就无法进行灾难恢复 1 备份策略 备份策略的制定是备份系统的一个重要部分 备份策略的选择依赖于数据的重要性 允许备份的可用时间以及其他的一些因素 一般
  • 序列化与反序列化(1)Serializable —— Java原生态方法

    摘自 序列化与反序列化 1 Serializable Java原生态方法 作者 丶PURSUING 发布时间 2021 05 08 19 20 21 网址 https blog csdn net weixin 44742824 articl
  • windows11安装docker时,修改默认安装到C盘

    1 修改默认安装到C盘 2 如果之前安装过docker 请删除如下目录 C Program Files Docker 3 在D盘新建目录 D Program Files Docker 4 win r 以管理员权限运行cmd 5 在cmd中执
  • MySQL权限详解

    本文为joshua317原创文章 转载请注明 转载自joshua317博客 https www joshua317 com article 55 MySQL提供了哪些权限 MySQL提供的权限列表如图所示 其中 All或者Allprivil
  • 一步一步学区块链(1)概念了解

    区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的 新型应用模式 所谓共识机制是区块链系统中实现不同节点之间建立信任 获取权益的数学算法 含义 比特币 BitCoin 的概念最初由中本聪在2009年提出 根据中本聪的思路设
  • PageHelper中的RowBounds

    RowBounds是处理ResultSet结果集进行分页 也就是说是mybatis默认实现是逻辑分页 并不是物理分页 但PageHelper将这个类利用起来进行了物理分页 PageHelper的其中一种使用方式就是将RowBounds参数获
  • DRM驱动代码分析:色彩管理

    高通PQ有哪些子模块 DSPP sub blocks SDE DSPP IGC DSPP Inverse gamma correction block SDE DSPP PCC Panel color correction block SD
  • Linux Ubuntu安装多个cuda版本

    因为pytorch版本与cuda版本有一定的对应要求 服务器上的cuda是不能自己随便动的 所以需要在自己账户中安装其他版本的cuda 而不能影响其他账户中已安装的cuda 这里参考了多篇博文总结出以下要点 1 nvcc和nvidia sm
  • 攻防世界 shrine 详解

    打开题目 整理源码 代码审计 目标 config FLAG 过滤了 config self 这两个函数的过滤没看懂 总之好像也没过滤掉 应该是过滤了后面的变量 圆括号是彻底的被过滤掉了 URL编码都没用 刚开始想测试XSS来着 做完后 拿编
  • JS数组过滤 简单------->多条件筛选

    在前端部分完成筛选功能 一次拿到所有数据 然后根据条件筛选 通常情况下筛选是后台给接口 在数据量不大的情况下 也有人可能会遇到前端筛选这样的情况 这个是例子中的被筛选数组 var aim name Anne age 23 gender fe