获取的唯一密钥如果我有对象的一个这样的数组:从多个对象
var mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
如何让所有的唯一键即['name', 'elevation', 'comment']
?
获取的唯一密钥如果我有对象的一个这样的数组:从多个对象
var mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
如何让所有的唯一键即['name', 'elevation', 'comment']
?
在ECMAScript中2015年,它真的很简单:
let mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
let uniqueKeys = Object.keys(Object.assign({}, ...mountains));
你可以遍历对象的数组过来,遍历每个元素与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是键的平均数量。
使用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;
});
你尝试过什么?你确定它的表现是一个问题吗?你多久一次这样做,它必须是**最**性能的方式? – Barmar
“*性能最高*”过于宽泛,取决于具体情况。解决你的问题。 – Amit
我只需循环遍历数组,然后遍历对象的键,然后将它们作为键添加到结果对象。然后使用'Object.keys(result)'获得唯一键列表。 – Barmar