如何从JavaScript对象中提取前缀为key带编号的动态属性值?
问题描述
我需要从对象中提取符合特定模式的动态key对应的属性值,这类key以key为前缀并附加数字编号。示例对象如下:
var obj = { "key2":{"left":{"content": "This data to be pulled"}}, "hasErrorcharges2":false, "hasErrorcharges2_Card":"" }
当前静态解构代码为:
const {key2: {left: content }} = obj;
但key2是动态的,可能是key0、key1、key3等,请问如何遍历提取对应值?
已尝试方案:
- 匹配对象是否存在相似key,但仅得到布尔值;
- 无法直接解构动态属性,但已知属性模式;
- 尝试遍历对象获取动态属性对应值;
- 期望编写类似
hasOwn()或hasOwnProperty的函数。
解决方案
方法1:筛选目标键后解构取值
先通过正则筛选出所有符合key+数字格式的键,再根据需求解构或遍历取值:
const obj = { "key2":{"left":{"content": "This data to be pulled"}}, "hasErrorcharges2":false, "hasErrorcharges2_Card":"" }; // 筛选符合模式的键 const targetKeys = Object.keys(obj).filter(key => /^key\d+$/.test(key)); // 单个目标键的情况 if (targetKeys.length) { const { left: { content } } = obj[targetKeys[0]]; console.log(content); // 输出:This data to be pulled } // 多个目标键的情况,遍历处理 targetKeys.forEach(key => { const { left: { content } } = obj[key]; console.log(`从${key}提取的内容:${content}`); });
方法2:封装工具函数实现检测+取值
如果需要频繁处理这类场景,可以封装成工具函数,兼顾键的检测和内容提取:
// 查找符合前缀+数字格式的键 function findPrefixedKey(obj, prefix = 'key') { const regex = new RegExp(`^${prefix}\\d+$`); return Object.keys(obj).find(key => regex.test(key)); } // 提取目标内容 function getDynamicContent(obj) { const targetKey = findPrefixedKey(obj); // 可选链避免层级不存在时报错 return targetKey ? obj[targetKey]?.left?.content : null; } // 使用示例 const content = getDynamicContent(obj); console.log(content); // 输出:This data to be pulled
方法3:动态解构赋值
如果已经获取到目标键,可以通过动态解构直接提取对应层级的值:
const targetKey = Object.keys(obj).find(key => /^key\d+$/.test(key)); if (targetKey) { const { [targetKey]: { left: { content } } } = obj; console.log(content); // 输出:This data to be pulled }
内容的提问来源于stack exchange,提问作者Ashish Singh Rawat
相关产品推荐
相关产品推荐

