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

JavaScript:如何提取对象数组中每个对象的键至新数组?

解决提取对象数组中每个对象键的问题

嘿,我来帮你捋捋这个问题~先说说你原来的代码为啥没生效:

你写的obj.map (({ val }) => val)是在尝试解构每个对象里的val属性,但你的每个对象里根本没有叫val的键(比如第一个对象只有a),所以每次解构都会得到undefined,最终result自然就是全是undefined的数组啦。

接下来给你几种可行的解法,因为你的例子里每个对象都只有一个键,这些方法都能完美适用:

方法1:用Object.keys()(最简洁直观)

Object.keys()会返回对象所有键组成的数组,因为每个对象只有一个键,直接取索引0的元素就行:

var obj = [{ "a": 1 }, { "b": 2 }, { "c": 3 }];
let result = obj.map(item => Object.keys(item)[0]);
console.log(result); // 输出: ["a","b","c"]

方法2:用for...in循环(兼容旧环境)

如果需要兼容一些不支持Object.keys()的旧运行环境,可以用for...in遍历对象的键(因为每个对象只有一个键,找到就返回):

var obj = [{ "a": 1 }, { "b": 2 }, { "c": 3 }];
let result = obj.map(item => {
  for (const key in item) {
    // 每个对象只有一个键,直接返回第一个找到的键
    return key;
  }
});
console.log(result); // 输出: ["a","b","c"]

方法3:用Object.entries()(另一种思路)

Object.entries()会把对象转换成[键, 值]格式的数组,我们取这个数组的第一个元素就是键:

var obj = [{ "a": 1 }, { "b": 2 }, { "c": 3 }];
let result = obj.map(item => Object.entries(item)[0][0]);
console.log(result); // 输出: ["a","b","c"]

拓展:如果对象有多个键怎么办?

要是以后你的对象可能包含多个键,想要把所有键都收集到结果数组里,可以用flatMap来实现:

var obj = [{ "a": 1, "d":4 }, { "b": 2 }, { "c": 3 }];
let result = obj.flatMap(item => Object.keys(item));
console.log(result); // 输出: ["a","d","b","c"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:09:17