基于子串值筛选对象的JavaScript代码优化(ES6实现)
基于ES6特性优化数组对象筛选逻辑
优化后的代码
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"; // 将字符串分割为独立ID数组,转为Set提升查找性能 const targetIds = new Set(str.split(', ')); // 解构赋值+Set.has()完成筛选 const newArr = usecases.filter(({ usecaseId }) => targetIds.has(usecaseId)); console.log(newArr);
优化说明
- 精确匹配+性能升级:
原代码用indexOf判断存在性,容易出现部分匹配的误判(比如把"Bill Gates Jr"误判为符合条件)。将字符串分割为独立ID数组并转为Set,既保证了精确匹配,又让查找操作的时间复杂度从O(n)降到O(1),数据量大时性能提升显著。 - 代码简洁性优化:
在filter回调中使用对象解构({ usecaseId }),直接提取需要的属性,避免重复书写usecaseObj.usecaseId;同时去掉冗余的if判断,直接返回布尔值,逻辑更清晰。
简化版(无需精确匹配场景)
如果可以确定字符串中的ID不会出现部分匹配的情况,也可以用更简洁的写法:
const newArr = usecases.filter(({ usecaseId }) => str.includes(usecaseId));
内容的提问来源于stack exchange,提问作者Kiara
相关产品推荐
相关产品推荐

