在一个对象数组中获取每个对象的关键字并存储到一个数组中:Javascript。

7

我有一个具有以下格式的对象

var obj = [{
  "a": 1
}, {
  "b": 2
}, {
  "c": 3
}];

我想从对象数组中每个对象只获取key并放入新的数组中。

就像这样:["a","b","c"]

尝试了以下代码但是没有成功:

var obj = [{
  "a": 1
}, {
  "b": 2
}, {
  "c": 3
}];
let result = obj.map (({ val }) => val)
console.log(result);

4个回答

17
使用 Object.assign() 合并为单个对象,然后获取对象的键:

var obj = [{"a":1},{"b":2},{"c":3}];

const result = Object.keys(Object.assign({}, ...obj));
console.log(result);

或者使用Array.flatMap()Object.keys()

var obj = [{"a":1},{"b":2},{"c":3}];

const result = obj.flatMap(Object.keys);
console.log(result);


4
喜欢第二个最好。 - mplungjan
1
如果对象具有相似的键,那么这两个选项之间可能会有一些细微差别:Object.assign 方法将返回唯一的键,而 flatMap 方法将返回每个对象的所有键,无论是否存在重复。 - Arnesfield
1
是的。如果您喜欢第二个选项,您需要使用集合来获取唯一的键。 - Ori Drori

2

我会使用.map方法并提取正在迭代的对象的Object.keys中的第一项:

最初的回答

var obj = [{
  "a": 1
}, {
  "b": 2
}, {
  "c": 3
}];

const result = obj.map(inner => Object.keys(inner)[0]);
console.log(result);


如果数组中的对象具有多个键,则无法正常工作。 - kubuntu

2
你可以使用Object.assignspread(...)操作符来解决这个问题。最初的回答已经提供了这个方法。

var mainObj = [{"a":1},{"b":2},{"c":3},{"23":1},{"32b":2},{"232c":3}];

const allKeys = Object.keys(Object.assign({}, ...mainObj));
console.log(allKeys);


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接