如果我有这样的对象数组:
var mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
如何获取所有唯一键,例如['name', 'elevation', 'comment']
?
答案 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是平均键数。