如何根据非期望键数组过滤对象项,生成符合要求的新JS对象
优化实现方案
方案1:最简洁的现代JS写法
const filteredObject = Object.fromEntries( Object.entries(myInitialObject).filter(([key]) => // 仅保留不包含任意不需要键片段的键值对 !unDesiredKey.some(badKey => key.includes(badKey)) ) )
方案2:可读性更强的显式遍历写法
适合需要在过滤过程中添加额外自定义逻辑的场景,每一步操作清晰可追溯:
const filteredObject = {} // 遍历原对象所有键值对 for (const [key, value] of Object.entries(myInitialObject)) { // 检查当前键是否命中不需要的片段 const needRemove = unDesiredKey.some(badKey => key.includes(badKey)) // 未命中则加入新对象 if (!needRemove) { filteredObject[key] = value } }
优化说明
- 过滤逻辑大幅简化:去掉了原实现中冗余的
map调用和双重否定判断,直接用Array.some()判断当前键是否包含任意不需要的片段,语义和原实现完全一致,逻辑一目了然。 - 对象构建逻辑更贴合语义:使用ES2019新增的
Object.fromEntries()API替代手动reduce累加对象,不需要额外处理累加器和对象展开,代码更精简的同时可读性更高。 - 可扩展性更强:如果后续判断规则需要调整(比如改成精确匹配键后缀、大小写不敏感匹配等),只需要修改
some()内的判断条件即可,不需要改动整体流程。
内容的提问来源于stack exchange,提问作者Karleen-Bx
相关产品推荐
相关产品推荐

