让我们想象一下,我有一组对象。
[{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"car": true
}, {
"firstName": "Peter",
"lastName": "Jones"
}]我想从这个对象数组中获取所有唯一的属性名,所以结果是:
[firstName, lastName, car]我该怎么做:
我可以想象这样做是有可能的:
function getPropertiesNames(obj){
var arr = [];
for(var name in obj) {
if(arr.indexOf(name) != -1) arr.push(name);
}
return arr;
} 为什么我需要它:
我得做一张由多个对象组成的表格。因为每个对象可能有点不同,所以我需要唯一的属性名。但是,我将在angularJS中这样做,因此,一次使用循环来获取<th>的属性名,再一次使用带<tr ng-repeat></tr>的循环来显示值,这对我来说是一种糟糕的选择。
我想要的:
是否有一些选项可以在不迭代对象的情况下从对象数组中获取所有唯一的属性名称?也许是一些我不知道的JS功能呢?
发布于 2016-08-31 11:50:19
我认为你无法逃避检查每个对象中的每个密钥。您可以使用例如reduce来完成它。
var result = _.reduce(array, function(memory, obj) {
for (var key in obj) {
if(memory.indexOf(key) === -1) memory.push(key)
}
return memory;
}, []);
var array = [{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"car": true
}, {
"firstName": "Peter",
"lastName": "Jones"
}];
var result = _.reduce(array, function(memory, obj) {
for (var key in obj) {
if(memory.indexOf(key) === -1) memory.push(key)
}
return memory;
}, []);
console.log(result);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
或者,您可以将密钥存储在新对象中,只需提取键:
var temp = _.reduce(array, function(memory, obj) {
for (var key in obj) {
memory[key] = null;
}
return memory;
}, {});
var result = Object.keys(temp);
var array = [{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"car": true
}, {
"firstName": "Peter",
"lastName": "Jones"
}];
var temp = _.reduce(array, function(memory, obj) {
for (var key in obj) {
memory[key] = null;
}
return memory;
}, {});
var result = Object.keys(temp);
console.log(result);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
https://stackoverflow.com/questions/39248687
复制相似问题