全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

J*aScript对象数组筛选:利用ES6进行子字符串匹配优化

JavaScript对象数组筛选:利用ES6进行子字符串匹配优化

本教程详细介绍了如何在j*ascript中高效地根据子字符串值过滤对象数组。文章首先展示了传统的`indexof`方法,随后深入探讨了es6中更现代、简洁的`string.prototype.match()`和`string.prototype.includes()`等方法,并通过实际代码示例对比了它们的用法、优缺点及适用场景,旨在帮助开发者选择最优方案进行数据筛选。

在前端开发中,我们经常需要处理包含多个对象的数组,并根据某个对象的属性值是否包含在另一个字符串中来进行筛选。例如,我们可能有一个用户列表,需要从中找出那些名字出现在某个特定字符串中的用户。本教程将通过一个具体的示例,详细讲解如何利用J*aScript的各种字符串匹配方法,特别是ES6的特性,来实现高效且简洁的对象数组筛选。

场景描述

假设我们有一个usecases数组,其中每个对象都包含usecaseId(姓名)、id和description等信息。同时,我们有一个字符串str,其中包含了我们希望筛选出的部分usecaseId。我们的目标是从usecases数组中过滤出那些usecaseId值存在于str字符串中的对象。

以下是示例数据:

const usecases =  [
    { usecaseId: 'Bill Gates', id: 1, description: 'CEO & founder, Microsoft' },
    { usecaseId: 'Mark Zuckerberg', id: 2, description: 'CEO, Facebook' },
    { usecaseId: 'Steve Jobs', id: 3, description: 'CEO & co-founder, Apple' },
    { usecaseId: 'Satya Nadella', id: 4, description: 'CEO, Microsoft' },
    { usecaseId: 'Elon Musk', id: 5, description: 'CEO, Tesla & SpaceX' },
    { usecaseId: 'Ginni Rometty', id: 6, description: 'CEO, IBM' },
    { usecaseId: 'Jeff Bezos', id: 7, description: 'CEO, Amazon' },
    { usecaseId: 'Larry Page', id: 8, description: 'CEO, Google' },
    { usecaseId: 'Jack Dorsey', id: 9, description: 'CEO, Twitter' },
    { usecaseId: 'Meg Whitman', id: 10, description: 'CEO, HP' },
    { usecaseId: 'Tim Cook', id: 11, description: 'CEO, Apple' },
    { usecaseId: 'Jeff Weiner', id: 12, description: 'CEO, LinkedIn' },
];

const str = "Bill Gates, Mark Zuckerberg, Tim Cook, Jeff Bezos, Steve Jobs";

传统方法:使用 String.prototype.indexOf()

在ES6之前,或者对于简单的子字符串查找,String.prototype.indexOf()是一个常用的方法。它返回子字符串在原字符串中第一次出现的索引,如果未找到则返回-1。

const newArrIndexOf = usecases.filter(usecaseObj => {
    // 如果indexOf返回-1,则表示未找到,条件为false
    // 否则(返回0或正整数),表示找到,条件为true
    return str.indexOf(usecaseObj.usecaseId) !== -1;
});

console.log("使用 indexOf 过滤结果:", newArrIndexOf);
/*
输出:
[
  { usecaseId: 'Bill Gates', id: 1, description: 'CEO & founder, Microsoft' },
  { usecaseId: 'Mark Zuckerberg', id: 2, description: 'CEO, Facebook' },
  { usecaseId: 'Steve Jobs', id: 3, description: 'CEO & co-founder, Apple' },
  { usecaseId: 'Jeff Bezos', id: 7, description: 'CEO, Amazon' },
  { usecaseId: 'Tim Cook', id: 11, description: 'CEO, Apple' }
]
*/

这种方法直观且兼容性好,但在某些场景下,我们可以利用ES6的特性来编写更简洁、更具表达力的代码。

ES6方法一:使用 String.prototype.match()

String.prototype.match()方法检索一个字符串与正则表达式的匹配。当传入一个字符串参数而非正则表达式对象时,match()会隐式地将其转换为一个正则表达式。如果找到匹配项,它会返回一个包含匹配结果的数组;如果没有找到,则返回null。我们可以利用这一点来判断是否匹配成功。

语鲸 语鲸

AI智能阅读辅助工具

语鲸 314 查看详情 语鲸
const newArrMatch = usecases.filter(usecaseObj => {
    // str.match(usecaseObj.usecaseId) 如果找到则返回一个数组(truthy),否则返回null(falsy)
    // 双重非操作符 (!!) 将 truthy/falsy 值转换为真正的布尔值 true/false
    return !!str.match(usecaseObj.usecaseId);
});

console.log("使用 match 过滤结果:", newArrMatch);
/*
输出与 indexOf 相同:
[
  { usecaseId: 'Bill Gates', id: 1, description: 'CEO & founder, Microsoft' },
  { usecaseId: 'Mark Zuckerberg', id: 2, description: 'CEO, Facebook' },
  { usecaseId: 'Steve Jobs', id: 3, description: 'CEO & co-founder, Apple' },
  { usecaseId: 'Jeff Bezos', id: 7, description: 'CEO, Amazon' },
  { usecaseId: 'Tim Cook', id: 11, description: 'CEO, Apple' }
]
*/

match()方法在需要更复杂的模式匹配(例如,使用正则表达式的特殊字符)时非常强大。对于简单的子字符串检查,它的语义可能略显“重”一些,因为它返回的是一个数组,而我们只关心是否存在匹配。

ES6方法二:使用 String.prototype.includes()

String.prototype.includes()是ES6引入的一个方法,专门用于判断一个字符串是否包含另一个字符串。它返回一个布尔值(true或false),这使得它在进行简单子字符串判断时,代码更加简洁和语义化。

const newArrIncludes = usecases.filter(usecaseObj => {
    // includes() 直接返回 true 或 false,无需额外的转换
    return str.includes(usecaseObj.usecaseId);
});

console.log("使用 includes 过滤结果:", newArrIncludes);
/*
输出与前两者相同:
[
  { usecaseId: 'Bill Gates', id: 1, description: 'CEO & founder, Microsoft' },
  { usecaseId: 'Mark Zuckerberg', id: 2, description: 'CEO, Facebook' },
  { usecaseId: 'Steve Jobs', id: 3, description: 'CEO & co-founder, Apple' },
  { usecaseId: 'Jeff Bezos', id: 7, description: 'CEO, Amazon' },
  { usecaseId: 'Tim Cook', id: 11, description: 'CEO, Apple' }
]
*/

方法对比与选择

特性/方法 indexOf() match() includes()
返回值 索引 (-1表示未找到) 匹配数组或 null 布尔值 (true/false)
语义化 良好,但需判断 -1 适用于正则,简单子串略显复杂 极佳,直接表达“包含”
简洁性 需 !== -1 需 !! 转换 最简洁,直接返回布尔值
性能 通常良好 涉及正则解析,可能略慢 通常良好,针对子串优化
ES版本要求 ES1 (普遍支持) ES1 (普遍支持) ES6 (现代浏览器支持良好)
适用场景 简单子串查找,需兼容老旧环境 复杂模式匹配,子串查找也可 简单子串查找,推荐使用

从上述对比可以看出,对于本教程中的简单子字符串匹配需求,String.prototype.includes()是ES6中最推荐的方法。它提供了最佳的语义化和简洁性,代码可读性高,且性能表现良好。

总结

在J*aScript中根据子字符串值过滤对象数组是一个常见的操作。虽然String.prototype.indexOf()能够完成任务,但ES6引入的String.prototype.match()和String.prototype.includes()提供了更现代、更简洁的解决方案。

  • 对于简单的子字符串存在性检查,强烈推荐使用String.prototype.includes(),因为它直接返回布尔值,代码最清晰。
  • 如果你的需求涉及更复杂的模式匹配(例如,忽略大小写、匹配多个模式等),那么String.prototype.match()结合正则表达式将是更强大的选择。

通过选择合适的字符串匹配方法,你可以编写出更高效、更易于维护的J*aScript代码。

以上就是J*aScript对象数组筛选:利用ES6进行子字符串匹配优化的详细内容,更多请关注其它相关文章!


# es6  # 杭州抖音seo优化电话  # 河南靠谱的推广营销  # app方式推广网站  # 杭州seo博客收录  # 昌乐网站推广关键词价格  # 互联网营销推广团队介绍  # 优化图像清晰度的网站  # 阜新企业网站建设模式  # 宁夏抖音关键词排名推荐  # 可以利用  # 转换为  # 因为它  # 推荐使用  # 未找到  # 有一个  # 多个  # 布尔值  # 是一个  # ap  # 前端开发  # facebook  # app  # 浏览器  # seo  # 正则表达式  # go  # 前端  # java  # javascript  # 硅胶东莞网站建设 


相关文章: win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  excel如何生成目录 excel一键生成工作表目录超链接  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  如何仅使用CSS更改登录界面背景图像图标的颜色  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  妖精动漫免费平台 妖精动漫官网资源观看网址  必由学在线入口 必由学网页版快速登录入口  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  PHP中高效并行检查多链接状态的教程  qq游戏手机版下载安装_qq游戏移动端入口  Python实时数据流中的动态最值查找策略  Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理  J*a TimerTask中HashMap意外清空的深层原因与解决方案  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  使用Pandas转换并合并DataFrame:多列映射至统一结构  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  必由学官方网站入口 必由学学生教师共用登录通道  PHP表单提交消息延迟显示:Post-Redirect-Get模式深度解析与实践  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  微信网页版登录教程_微信网页版登录入口在哪  Lar*el递归关系中排除子孙节点的策略  微信商城在哪里打开【步骤】  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  汽水音乐在线版入口_汽水音乐网页播放手册  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  抖音网页版平台入口 抖音网页版官网在线访问教程  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解  蛙漫2台版漫画地址 Manwa2正版网页版链接  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  支付宝如何设置安全保护_支付宝安全设置的全面教程  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。