如何优化对象数组中按键取值及特定值存在性判断的实现
优化方案
1. 用some快速判断存在性
如果你只需要检查目标age是否存在,Array.prototype.some()是最简洁高效的选择——它会在找到第一个匹配项后立即停止遍历,不会像forEach那样走完整个数组:
function groupByName(contract) { const { age } = contract; const groups = [ {name: 'John', age: 30}, {name: 'Jack', age: 33}, {name: 'Tom', age: 40} // ...其他项 ]; // 检查age是否存在 const hasTargetAge = groups.some(item => item.age === age); // 后续逻辑... }
2. 用find获取匹配的对象
如果需要找到匹配age的具体对象,用Array.prototype.find(),它同样会在找到第一个匹配项后终止遍历:
function groupByName(contract) { const { age } = contract; const groups = [ {name: 'John', age: 30}, {name: 'Jack', age: 33}, {name: 'Tom', age: 40} // ...其他项 ]; // 获取匹配的对象(找不到则返回undefined) const targetGroup = groups.find(item => item.age === age); // 判断是否存在 const hasTargetAge = !!targetGroup; // 后续逻辑... }
3. 频繁查询时用Set预处理(极致高效)
如果groups数组是固定的,且需要多次检查不同age,建议提前把所有age提取到Set中——Set的has()方法查询时间复杂度是O(1),比遍历数组高效得多:
// 预处理(如果groups不会动态变化,建议放在函数外,避免重复执行) const groups = [ {name: 'John', age: 30}, {name: 'Jack', age: 33}, {name: 'Tom', age: 40} // ...其他项 ]; const ageSet = new Set(groups.map(item => item.age)); function groupByName(contract) { const { age } = contract; // 直接查询Set const hasTargetAge = ageSet.has(age); // 后续逻辑... }
内容的提问来源于stack exchange,提问作者bmusonda
相关产品推荐
相关产品推荐

