You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:35:29