让我们想象一下,我有一组对象。
[{
"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 12:03:02
仅使用以下方法的解决方案:
var data = [{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"car": true
}, {
"firstName": "Peter",
"lastName": "Jones"
}];
var uniqueKeys = Object.keys(data.reduce(function(result, obj) {
return Object.assign(result, obj);
}, {}))
console.log(uniqueKeys);
发布于 2016-08-31 11:53:53
您可以使用map()和keys()返回每个对象的键,然后返回union()和flatten()。
var data = [{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"car": true
}, {
"firstName": "Peter",
"lastName": "Jones"
}]
var result = _.union(_.flatten(_.map(data, (e) => _.keys(e))));
console.log(result)<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
发布于 2019-07-15 08:30:36
可以使用Object.assign()和扩展语法将对象数组合并到单个对象。然后从合并的对象获取键:
Object.keys(Object.assign({}, ...array)) 这里有一个片段:
const array = [{firstName:"John",lastName:"Doe"},{firstName:"Anna",car:true},{firstName:"Peter",lastName:"Jones"}],
unique = Object.keys(Object.assign({}, ...array))
console.log(unique)
另一种选择是使用Object.keys作为对flatMap的回调。这将返回所有键的数组。然后,创建一个Set来获取唯一的键,并使用Array.from()将集合转换为一个数组。
const keys = input.flatMap(Object.keys),
unique = Array.from(new Set(keys));这里有一个有用的片段:
const input=[{firstName:"John",lastName:"Doe"},{firstName:"Anna",car:true},{firstName:"Peter",lastName:"Jones"}],
unique = Array.from(new Set(input.flatMap(Object.keys)));
console.log(unique)
如果不支持flatMap,则可以使用
const keys = [].concat(...input.map(Object.keys)),https://stackoverflow.com/questions/39248687
复制相似问题