从多个对象获取唯一键

时间:2016-03-08 23:30:17

标签: javascript

如果我有这样的对象数组:

var mountains = [
    { name: 'Kebnekaise', elevation: 2106 },
    { name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];

如何获取所有唯一键,例如['name', 'elevation', 'comment']

3 个答案:

答案 0 :(得分:7)

在ECMAScript 2015中,它非常简单:

let mountains = [
  { name: 'Kebnekaise', elevation: 2106 },
  { name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];

let uniqueKeys = Object.keys(Object.assign({}, ...mountains));

答案 1 :(得分:3)

使用ES6,可以做到

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

没有ES6,比如

var unique = [].concat.apply([],mountains.map(Object.keys)).filter(function(value,i,arr) {
    return arr.indexOf(value) === i;
});

答案 2 :(得分:1)

您可以迭代对象数组并使用Object.keys(obj)迭代每个元素的键,将它们添加到哈希值以避免重复:

function getKeySet (data) {
  var keys = {};

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

  return Object.keys(keys);
}

或者,您可以将所有键添加到数组中并过滤掉重复项。无论哪种方式,这将是O(nm),其中n是数组中元素的数量,m是平均键数。