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
相关产品推荐
相关产品推荐

