从对象数组中获取键值:Javascript

3

我有这样一个场景,需要从对象数组中只获取键。对象结构如下所示。我也尝试了一种方法,但似乎不起作用。有人能帮我吗?

var arr = [
        { firstName: "aaaaa", status: 0, visits: 155 },
        { firstName: "aabFaa", status: 0, visits: 155 },
        { firstName: "adaAAaaa", status: 10, visits: 1785 },
        { firstName: "aAaaaa", status: 50, visits: 175 },
        { firstName: "aaaaa", status: 670, visits: 155 },
      ]

console.log([...new Set(arr.map(item => Object.keys(item)))]); //  This does not work

我希望输出结果只包括['firstName','status','visits']

你期望的结果是什么? - Bergi
3个回答

6

Object.keys函数返回的就是一个数组,因此你的map会创建一个数组的数组。应该使用flatMap函数代替:

console.log(Array.from(new Set(arr.flatMap(Object.keys))))

或者,由于数组中的所有对象具有相同的键,您可以只取第一个对象的键:

console.log(Object.keys(arr[0]))

这也表明该代码仅适用于非空数组。


2

你正在尝试从一个二维键数组创建一个Set。使用flatMap来获取数组中所有对象的键的扁平化数组。

[...new Set(arr.flatMap(item => Object.keys(item)))]

以下是一小段代码:

这里是一个片段:

const arr = [
      { firstName: "aaaaa", status: 0, visits: 155 },
      { firstName: "aabFaa", status: 0, visits: 155 },
      { firstName: "adaAAaaa", status: 10, visits: 1785 },
      { firstName: "aAaaaa", status: 50, visits: 175 },
      { firstName: "aaaaa", status: 670, visits: 155 },
    ];
    
const uniqueKeys = [...new Set(arr.flatMap(Object.keys))]

console.log(uniqueKeys)


可以只是 flatMap(Object.keys) - georg
@georg 是的。我只是复制了 OP 的代码。而且,Bergi 已经建议过了。 - adiga

1

Object.keys(arr[0]) 可能是最短的解决方案,假设 arr 中的每个对象都具有相同的键:

var arr = [{
    firstName: "aaaaa",
    status: 0,
    visits: 155
  },
  {
    firstName: "aabFaa",
    status: 0,
    visits: 155
  },
  {
    firstName: "adaAAaaa",
    status: 10,
    visits: 1785
  },
  {
    firstName: "aAaaaa",
    status: 50,
    visits: 175
  },
  {
    firstName: "aaaaa",
    status: 670,
    visits: 155
  },
]

let keys = Object.keys(arr[0]);

console.log(keys);


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