从对象数组中获取对象属性名称数组



我正在寻找类似的东西:

const object1 = {
a: 1,
b: 2,
c: 3
};
console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

然而,在我的例子中,我有:

const objectArray1 = [
{ a: 112, b: 322, c: 233 },
{ a: 611, b: 232, c: 331 },
{ a: 132, b: 232, c: 342 }
];

从中获得["a", "b", "c"]的最有效方法是什么?

此外,这种情况可能永远不会发生,但如果其中一个objectArray1对象中有d: 345或缺少键/值对,则需要进行处理。

有什么想法吗?

使用Object.keysflatMapobjectArray1的所有条目映射到对象的键,以获得所有对象中所有键的平面数组
然后通过Set提取唯一值。可以使用...扩展运算符将Set转换回阵列:

const objectArray1 = [
{ a: 112, b: 322, c: 233 },
{ a: 611, b: 232, c: 331 },
{ a: 132, b: 232, c: 342 },
{ a: 132, b: 232, c: 342, d: 532 }
];
const keys = [
...new Set(objectArray1.flatMap(Object.keys))
];
console.log(keys)

在这种情况下应该使用Object.keys

const object1 = {
a: 1,
b: 2,
c: 3
};
const result = Object.keys(object1)
console.log(result)

如果你有一个数组,你也可以添加Set来过滤唯一的密钥

const objectArray1 = [
{ a: 112, b: 322, c: 233 },
{ a: 611, b: 232, c: 331 },
{ a: 132, b: 232, c: 342 }
];
const result = Array.from(new Set(objectArray1.flatMap((value) => Object.keys(value))))
console.log(result)

我个人会将flatMap((与Object.keys((一起使用,然后使用带有spread运算符的new Set((从中创建一个新的唯一数组。

const objectArray1 = [
{ a: 112, c: 233 },
{ b: 232, c: 331 },
{ a: 132, b: 232, c: 342, d: 5 }
]

const uniqueKeys = (arr) => [...new Set(arr.flatMap(Object.keys))]
console.log(uniqueKeys(objectArray1))
//expected ["a", "b", "c", "d"]

最新更新