javascript 字符串转数字 javascript 字符串数组

本教程旨在高效介绍如何在javascript中根据子字符串值筛选对象排序。我们将探讨两种主要方法:一种是利用`string.prototype.indexof()`的传统方式,另一种是采用es6特性,通过`string.prototype.match()`结合正则表达式进行优化,以实现更简洁、可执行性更强的代码。
在JavaScript开发中,我们经常需要从一个个包含多个对象的数组中,根据特定条件筛选出符合要求的部分。本教程将聚焦于一个常见场景:给定一个对象队列,每个对象包含一个唯一标识符(例如usecaseId),以及一个包含多个标识符的字符串,我们整理出那些其usecaseId需要存在于该字符串中的对象。最终数据结构
为了演示,我们使用以下实例数据:一个名为usecases的对象数组,以及一个名为str的字符串,其中包含了一些usecaseId值。
const usecases = [ { usecaseId: '比尔·盖茨', id: 1, 描述: 'CEO amp;创始人,微软' }, { usecaseId: '马克·扎克伯格', id: 2,描述: 'CEO,Facebook' }, { usecaseId: '史蒂夫·乔布斯', id: 3, 描述: 'CEO amp;联合创始人,苹果' }, { usecaseId: 'Satya纳德拉', id: 4, 描述: 'CEO,微软' }, { usecaseId: '埃隆·马斯克', id: 5, 描述: 'CEO,特斯拉amp;SpaceX' }, { usecaseId: 'Ginni Rometty', id: 6, 描述: 'CEO,IBM' }, { usecaseId: '杰夫·贝索斯', id: 7, 描述: 'CEO,亚马逊' }, { usecaseId: '拉里·佩奇', id: 8, 描述: '首席执行官,谷歌' }, { usecaseId: '杰克·多尔西', id: 9, 描述: '首席执行官, Twitter' }, { usecaseId: '梅格·惠特曼', id: 10,描述: '首席执行官,惠普' }, { usecaseId: '蒂姆·库克', id: 11,描述: '首席执行官,苹果' }, { usecaseId: 'Jeff Weiner', id: 12, description: 'CEO, LinkedIn' }, ] const str = quot;Bill Gates, Mark Zuckerberg, Tim Cook, Jeff Bezos, Steve Jobsquot;;登录后复制
我们的目标是从usecases数据库中过滤出那些usecaseId值出现在str字符串中的对象。传统方法:使用String.prototype.indexOf()
在ES6普及之前,或者对于简单的子字符串查找,我们通常会使用Array.prototype.filter()方法结合String.prototype.indexOf()来实现。
立即学习“Java免费学习笔记(深入)”;
Array.prototyp e.filter()方法会遍历数组中的每个元素,公开每个元素执行回调一个返回函数。如果回调函数返回true,则该元素被包含在新的数组中;如果为false,则被修复。
String.prototype.indexOf()方法用于查找指定子字符串在字符串中第一次出现的索引。如果找到,则返回该子串的起始索引;如果找到,则返回-1。
以下是使用indexOf()实现筛选的代码示例:const newArrIndexOf = usecases.filter(usecaseObj =gt; { // usecaseId 在 str 中找到,indexOf 会返回 gt;= 0 的索引 // else 返回 -1 if (str.indexOf(usecaseObj.usecaseId) !== -1) { return true; // 保留该对象 } return false; //过滤掉该对象});console.log(quot;使用indexOf 的结果:quot;, newArrIndexOf);登录后复制
代码解析:
此方法通过遍历usecases数组,对每个usecaseObj,检查其usecaseId属性值是否在str中。str.indexOf(usecaseObj.usecaseId)会返回子字符串在原字符串中的起始索引,如果未找到则返回-1。因此,当结果不等于-1时,表示找到了匹配项,filter方法会保留该对象。
AI 帮助自动化日常任务 206 查看详情 ES6优化方法:使用String.prototype.match()
ES6及后续版本提供了更加简洁和强大的功能,可以优化此类筛选操作。其中,String.prototype.match()方法结合正则表达式是实现这一目标的一种优雅方式。
String.prototype.match()方法用于将字符串与正表达式进行匹配。它会返回一个包含返回匹配结果的数组,或者在没有找到匹配项时为空。
我们可以利用match()的这个特性,并通过双重非运算!!将结果转换为布尔值,从而在filter回调函数中直接使用:const newArrMatch = usecases.filter(usecaseObj =gt; { // str.match(usecaseObj.usecaseId) 如果找到匹配项,则返回一个导入(truthy) // 如果未找到,返回 null(falsy) // !! true/falsy 值为true/false return !!str.match(usecaseObj.usecaseId);});console.log(quot;使用 match 的结果:quot;, newArrMatch);登录后复制
代码解析:
str.match(usecaseObj.usecaseId)尝试在str中查找与usecaseObj.usecaseId匹配的子字符串。如果找到,它会返回一个包含匹配信息的数通过在前面加上双重非运算符!!,我们可以把这个结果直接转换为布尔值:null=假,非null值(即找到匹配项)=true。这种方式使得代码更加简洁和丰富表达力。两种方法的与注意事项比较简洁性与可执行性:match()结合!!的方式通常被认为是更简洁和现代的JavaScript编写方法,尤其是在处理布尔逻辑时。将匹配和布尔转换融合到一行代码中,具有可执行性。indexOf()虽然计算,但需要显着地与-1进行比较。
灵活性:match( )方法接受正则表达式作为参数,这意味着如果未来需要更复杂的匹配逻辑(例如,不区分大小写、匹配特定模式判别精确子字符串),可以轻松扩展正则表达式而改变筛选结构。例如,要实现不区分大小写的匹配,可以将usecaseObj.usecaseId转换为new RegExp(usecaseObj.usecaseId,简单来说,indexOf()只能进行精确的子字符串匹配,不具备正则表达式的强大功能。
性能:对于小型数据集和子字符串查找,两种方法的性能差异通常可以忽略不计。但在处理大型数据集或高频调时使用时,性能可能需要进一步测试和分析。正则表达式引擎的头部可能略为简单的索引查找,但在现代JavaScript引擎中,这种差异通常很小,并且在某些场景下匹配可能因为其基础优化而表现良好。对于大多数Web应用使用场景,匹配的优势在于其表达力和灵活性。总结
综上所述,无论是使用传统的indexOf()还是ES6的match()方法,JavaScript都提供了灵活的工具来根据子字符串筛选对象排序。在追求代在代码简洁性、区分性以及未来可扩展性方面,推荐采用match()结合正则表达式的ES6优化方案。根据具体的项目需求、团队编码规范以及对绩效的考量选择哪种方法。对于需要更复杂匹配模式的场景,match()的优势将更加明显。
以上就是JavaScript中根据子字符串值筛选对象备份的教程的详细内容,更多请关注乐哥常识网其他相关文章!浏览器扩展_Chrome插件开发JavaScript重构技巧_代码坏味道识别与高效Playwright教程:获取DOM元素值属性消耗,页面交互Node.js Express服务React应用:正确配置静态文件路径
