如何将含动态索引键的JS对象转换为指定结构?
对象结构转换的最优实现方式
针对你的对象转换需求,可以通过遍历原对象键值对+正则提取关键信息的方式实现,这是时间复杂度O(n)的线性最优方案,具体代码如下(以JavaScript为例):
const originalObj = { "props[EYE][0]": "Yellow", "props[EYE][1]": "Blue", "props[BODY][0]": "BATMAN", "props[BODY][1]": "SUPERMAN" }; const transformedObj = {}; // 遍历原对象所有键值对 for (const [key, value] of Object.entries(originalObj)) { // 正则匹配提取类型(如EYE、BODY)和索引 const matchResult = key.match(/props\[(\w+)\]\[(\d+)\]/); if (matchResult) { const type = matchResult[1]; const newKey = `props-${type}`; const index = parseInt(matchResult[2], 10); // 初始化数组(避免覆盖已有数据) if (!transformedObj[newKey]) { transformedObj[newKey] = []; } // 按索引赋值,兼容非连续索引场景 transformedObj[newKey][index] = value; } } console.log(transformedObj);
关键说明:
- 用
Object.entries遍历原对象,确保所有键值对都被处理,不会遗漏 - 正则表达式精准匹配键的结构,动态提取
[EYE]/[BODY]这类动态内容和索引值 - 每次处理前先检查新键是否存在,不存在则初始化空数组,这是解决你之前只拿到第一个值的核心——避免每次都用新数组覆盖已有数据
- 如果确定索引是从0开始的连续数字,也可以用
transformedObj[newKey].push(value)替代索引赋值,代码会更简洁
内容的提问来源于stack exchange,提问作者miladbruce
相关产品推荐
相关产品推荐

