查找对象数组中的所有键



假设我有一个数组,它是从包含对象的数据库返回的,

var jsObjects = [
{a: 1, b: 2}, 
{a: 3, b: 4, c: 66}, 
{a: 5, b: 6, c: 55, d: 66}, 
{a: 7, b: 8, c: 12, e: 15}
];

如何获取对象的所有密钥?我一直在使用它来获取密钥,但是我注意到索引0并不总是拥有所有的密钥。所以问题就来了。

let columns = Object.keys(jsObjects[0]),

但是,第一个索引并不总是包含所有列。

我想要的输出:

["a", "b", "c", "d", "e"]

集合擅长删除重复项:

const jsObjects = [
{a: 1, b: 2}, 
{a: 3, b: 4, c: 66}, 
{a: 5, b: 6, c: 55, d: 66}, 
{a: 7, b: 8, c: 12, e: 15}
];
const keys = [...new Set(jsObjects.flatMap(Object.keys))];
console.log(keys);

您可以使用键的计数创建一个对象,并从计数中获取键。

const
objects = [{ a: 1, b: 2 }, { a: 3, b: 4, c: 66 }, { a: 5, b: 6, c: 55, d: 66 }, { a: 7, b: 8, c: 12, e: 15 }],
result = Object.keys(objects.reduce((r, o) => {
Object.keys(o).forEach(k => r[k] = true);
return r;
}));
console.log(result);

您可以使用Set(),它就像一个数组,只是不允许元素多次出现。

var jsObjects = [
{a: 1, b: 2}, 
{a: 3, b: 4, c: 66}, 
{a: 5, b: 6, c: 55, d: 66}, 
{a: 7, b: 8, c: 12, e: 15}
];
var keys = new Set();
for(object of jsObjects) {
for(key in object) {
keys = keys.add(key);
}
}
for (const key of keys) {
console.log(key);
}

我尝试了这个解决方案:迭代jsObjects元素并按键进入数组(如果不存在)。

var jsObjects = [
{a: 1, b: 2}, 
{a: 3, b: 4, c: 66}, 
{a: 5, b: 6, c: 55, d: 66}, 
{a: 7, b: 8, c: 12, e: 15}
];
let columns = [];
jsObjects.forEach(
o => {
Object.keys(o).forEach(
t => {
if (columns.indexOf(t) < 0 ) {
columns.push(t);
}
}
)
}
)    
console.log(columns);

最新更新