你可以使用
map()
和
Set
:
var arr = [
{ first:"jeff", last:"doe", phone: "2891", something: "4" },
{ first:"sarah", phone:"this", county: "usa" },
{ first:"bob", last:"brown", county: "usa", phone: "23211", lastrow: "lr" }
];
var set = new Set();
arr.map(obj => {
Object.keys(obj).forEach(el => {
set.add(el);
});
});
var res = [...set];
console.log(res);
我已经使用上面的代码与
@Nenad Vracar和
@Redu的代码一起在Chrome浏览器中测试了
console time
。
var array = [
{ first:"jeff", last:"doe", phone: "2891", something: "4" },
{ first:"sarah", phone:"this", county: "usa" },
{ first:"bob", last:"brown", county: "usa", phone: "23211", lastrow: "lr" }
];
function f1(arr) {
var set = new Set();
arr.map(obj => {
Object.keys(obj).forEach(el => {
set.add(el);
});
});
var res = [...set];
return res;
}
function f2(arr) {
var keys = [...new Set(arr.reduce(function(r, e) {
r = r.concat(Object.keys(e));
return r;
}, []))];
return keys;
}
function f3(arr) {
var result = arr.reduce((p,o) => p.concat(Object.keys(o).filter(k => !p.includes(k))),[]);
return result;
}
var iterations = 1000000;
console.time('Function f1');
for(var i = 0; i < iterations; i++ ){
f1(array);
};
console.timeEnd('Function f1')
console.time('Function f2');
for(var i = 0; i < iterations; i++ ){
f2(array);
};
console.timeEnd('Function f2')
console.time('Function f3');
for(var i = 0; i < iterations; i++ ){
f3(array);
};
console.timeEnd('Function f3')
以下是结果:
第一个结果:
- 函数 f1:6375.193毫秒
- 函数 f2:6309.516毫秒
- 函数 f3:6756.946毫秒
第二个结果:
- 函数 f1:6152.040毫秒
- 函数 f2:8004.565毫秒
- 函数 f3:6885.656毫秒
第三个结果:
- 函数 f1:5918.497毫秒
- 函数 f2:8136.073毫秒
- 函数 f3:7111.273毫秒