首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从对象数组中获取所有唯一的对象属性

从对象数组中获取所有唯一的对象属性
EN

Stack Overflow用户
提问于 2016-08-31 11:41:04
回答 9查看 12.5K关注 0票数 17

让我们想象一下,我有一组对象。

代码语言:javascript
运行
复制
 [{
    "firstName": "John",
    "lastName": "Doe"
 }, {
    "firstName": "Anna",
    "car": true
 }, {
    "firstName": "Peter",
    "lastName": "Jones"
 }]

我想从这个对象数组中获取所有唯一的属性名,所以结果是:

代码语言:javascript
运行
复制
[firstName, lastName, car]

我该怎么做:

我可以想象这样做是有可能的:

代码语言:javascript
运行
复制
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功能呢?

EN

Stack Overflow用户

发布于 2016-08-31 11:50:19

我认为你无法逃避检查每个对象中的每个密钥。您可以使用例如reduce来完成它。

代码语言:javascript
运行
复制
var result = _.reduce(array, function(memory, obj) {
  for (var key in obj) {
    if(memory.indexOf(key) === -1) memory.push(key)
  }
  return memory;
}, []);

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

或者,您可以将密钥存储在新对象中,只需提取键:

代码语言:javascript
运行
复制
var temp = _.reduce(array, function(memory, obj) {
  for (var key in obj) {
    memory[key] = null;
  }
  return memory;
}, {});
var result = Object.keys(temp);

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

票数 3
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39248687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档