Get unique keys from multiple objects

后端 未结 3 381
不思量自难忘°
不思量自难忘° 2020-12-11 12:45

If I have an array of objects like this:

var mountains = [
    { name: \'Kebnekaise\', elevation: 2106 },
    { name: \'Mount Ngauruhoe\', elevation: 2291, c         


        
相关标签:
3条回答
  • 2020-12-11 13:19

    You could iterate over the array of objects and iterate over each element's keys with Object.keys(obj), adding them to a hash to avoid duplicates:

    function getKeySet (data) {
      var keys = {};
    
      data.forEach(function (datum) {
        Object.keys(datum).forEach(function (key) {
          keys[key] = true;
        });
      });
    
      return Object.keys(keys);
    }
    

    Alternately you could add all the keys to an array and filter out duplicates. Either way this will be O(nm) where n is the number of elements in the array and m is the average number of keys.

    0 讨论(0)
  • 2020-12-11 13:22

    Using ES6, one could do

    var unique = new Set([].concat.apply([],mountains.map(Object.keys)))
    

    Without ES6, something like

    var unique = [].concat.apply([],mountains.map(Object.keys)).filter(function(value,i,arr) {
        return arr.indexOf(value) === i;
    });
    
    0 讨论(0)
  • 2020-12-11 13:32

    In ECMAScript 2015, it's really simple:

    let mountains = [
      { name: 'Kebnekaise', elevation: 2106 },
      { name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
    ];
    
    let uniqueKeys = Object.keys(Object.assign({}, ...mountains));
    
    0 讨论(0)
提交回复
热议问题