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

JavaScript对象提取id、name及特殊语法解析技术求助

问题解答

嘿,我来帮你理清楚这个问题~

一、先搞懂'410467873518256138' => Emoji { ... }到底是什么

你看到的这个写法不是标准的JS对象定义语法,而是浏览器或者Node.js控制台为了直观展示对象结构,用的一种“键-值映射”的显示格式:

  • 左边的'410467873518256138'是外层对象的属性键(字符串类型)
  • 右边的Emoji { ... }是这个键对应的值,是一个Emoji类的实例对象
  • 控制台用=>来表示“这个键对应这个值”,而我们平时写代码时用的:才是标准的对象键值对定义语法。举个实际代码的例子,你看到的控制台输出对应的代码大概是这样的:
class Emoji {
  constructor(id, name) {
    this.id = id;
    this.name = name;
  }
}

// 这是你实际定义的对象
const myObj = {
  '410467873518256138': new Emoji('410467873518256138', 'element1')
};

当你在控制台打印myObj时,就会看到类似{ '410467873518256138' => Emoji { id: '410467873518256138', name: 'element1' } }的输出,本质还是普通对象,只是显示方式不同而已。

二、怎么提取你要的id和name?

你用object.id拿不到内容,是因为id不是外层对象的直接属性——它藏在Emoji实例里面呢!你得先拿到这个Emoji实例,再访问它的属性:

方法1:已知键的情况下直接取

如果你已经知道这个属性键是'410467873518256138',用方括号语法就能拿到对应的实例:

// 假设你的对象叫myObj
const emojiItem = myObj['410467873518256138'];
const targetId = emojiItem.id; // 得到你要的'410467873518256138'
const targetName = emojiItem.name; // 得到'element1'

这里必须用方括号[],不能用点语法,因为这个键是长数字字符串,不符合JS标识符的规则(点语法要求属性名是合法标识符,比如不能有这么长的纯数字字符串)。

方法2:不知道键的话就遍历对象

如果对象里有多个类似的Emoji实例,或者你不确定具体的键,可以遍历对象的所有属性:

// 方式1:遍历所有键
for (const key of Object.keys(myObj)) {
  const emoji = myObj[key];
  console.log('id:', emoji.id);
  console.log('name:', emoji.name);
}

// 方式2:直接拿所有值,更简洁
Object.values(myObj).forEach(emoji => {
  console.log('id:', emoji.id);
  console.log('name:', emoji.name);
});

三、为啥object.id没用?

因为object.id等价于object['id'],它会去外层对象里找键为'id'的属性,但你的外层对象根本没有这个键——它的键是那个长数字字符串'410467873518256138',所以自然返回undefined,也就没输出啦。


内容的提问来源于stack exchange,提问作者user7195739

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:30