【问题标题】:Get keys of first object in object of arrays获取数组对象中第一个对象的键
【发布时间】:2020-02-07 08:37:51
【问题描述】:

我正在尝试从对象数组中获取一组(不同的)键。

arr =[
   {id: 1, desc: "", name: "", objectives: Array(3), …},
   {id: 2, desc: "", name: "", objectives: Array(3), …},
   {id: 3, desc: "", name: "", objectives: Array(3), …},
   {id: 4, desc: "", name: "", objectives: Array(3), …},
]

所需的输出是 [id, desc, name, targets]。我试过了:

Object.keys(arr)[0]
// output [{id: 1, desc: "", name: "", objectives: Array(3), …}]

arr.flatMap(Object.key)
// output ["id", "desc", "name", "objectives", "id", "desc", "name", "objectives", "id", "desc", "name", "objectives", "id", "desc", "name", "objectives"]

如果我在搜索 SO 时错过了这个问题的答案,我很抱歉。任何帮助将不胜感激。

【问题讨论】:

  • 第一个对象的键(根据标题)就是const keys = Object.keys(arr[0]);。你问的是这个吗?

标签: javascript arrays javascript-objects array.prototype.map


【解决方案1】:

这应该可行。

arr = [
   {id: 1, desc: "", name: "", objectives: Array(3)},
   {id: 2, desc: "", name: "", objectives: Array(3)},
   {id: 3, desc: "", name: "", objectives: Array(3)},
   {id: 4, desc: "", name: "", objectives: Array(3)},
];

keyArr = [];
Object.keys(arr).find(keys => {
    Object.keys(arr[keys]).find(key => {
    keyArr.push(key);
  });
})
console.log(keyArr);

【讨论】:

    【解决方案2】:
        const arr =[
          {id: 1, desc: "", name: "", objectives: Array(3), …},
          {id: 2, desc: "", name: "", objectives: Array(3), …},
          {id: 3, desc: "", name: "", objectives: Array(3), …},
          {id: 4, desc: "", name: "", objectives: Array(3), …},
        ];
    
        let distinct = function(arr, key_name) {
           let seen_values = [];
           let unique_objects = [];
           for(i = 0; i < arr.length; i++) {
             // If this value is new, a.k.a. distinct then add it to our filtered list.
             if(!seen_values.includes(arr[i][key_name]) {
                unique_objects.push(arr[i])
             }
             // Add this value to our seen values.
             seen_values.push(arr[i][key_name])
           }
           return unique_objects;
        }
    
        // Example usage, filter by desc
        let filtered_set = distinct(arr, "desc")
    
        // Example usage, filter by id
        let filtered_set_2 = distinct(arr, "id")
    

    所以这应该有效。 distinct 函数将通过给定的 key_name 过滤传入的 arr。这种方法的一个限制是,如果您的对象中的一个值是另一个对象,您将需要对该对象进行更深入的检查才能比较它们。

    【讨论】:

      【解决方案3】:

      您可以使用Set 清除重复项:

      const arr = [
         {id: 1, desc: "", name: "", objectives: []},
         {id: 2, desc: "", name: "", objectives: []},
         {id: 3, desc: "", name: "", objectives: []},
         {id: 4, desc: "", name: "", objectives: []},
      ];
      
      const keys = [...new Set(arr.flatMap(Object.keys))];
      
      console.log(keys);

      【讨论】:

      • sry 我删除了我的评论,我想说他应该写Object.keys(arr[0])而不是Object.keys(arr)[0](所以我们同意:))
      猜你喜欢
      • 2019-07-25
      • 2022-11-27
      • 2021-03-23
      • 1970-01-01
      • 2017-07-17
      • 2021-06-30
      • 2018-12-19
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多