根据对象中键的名称过滤对象数组[重复]

Posted

技术标签:

【中文标题】根据对象中键的名称过滤对象数组[重复]【英文标题】:Filter an array of objects according to the name of the key in the objects [duplicate] 【发布时间】:2021-11-07 00:26:44 【问题描述】:

我有一个对象数组,我想根据这些对象的键名进行过滤。在这种特殊情况下,我知道数组中的每个元素都会有一个键/值对。

假设一个数组如下所示:

let dataArray = [
  
    "name": "David" 
  ,
  
    "location": "New York"
  ,
  
    "name": "Jenna"
  
]

我想要结束的只是一个数组,其中key 是“名称”:

[
  
    name: "David" 
  ,
  
    name: "Jenna"
  
]

我已经尝试过使用filter 方法的各种方法,例如:

const namesArr = dataArr.filter(i => i[key] === 'name');

但似乎没有一个能产生正确的结果。

【问题讨论】:

dataArray.filter(o => Object.prototype.hasOwnProperty.call(o, 'name')) “the”键是什么意思?如果这些对象有多个键或没有键怎么办? 在这种情况下,我知道我将获得什么数据,并且每个对象只会有一个键/值对。 这能回答你的问题吗? How do I check if an object has a specific property in javascript?,特别是***.com/a/49899370/13762301 【参考方案1】:

使用in 运算符检查对象上是否存在属性:

const dataArray = ["name":"David","location":"New York","name":"Jenna"];

// name exists on the object
console.log(dataArray.filter(item => 'name' in item));

// or location doesn't exist on the object
console.log(dataArray.filter(item => !('location' in item)));

【讨论】:

【参考方案2】:

您可以使用 object.hasOwnProperty('name') 返回一个布尔值,指示对象是否具有属性名称

let dataArray = [
  
    "name": "David" 
  ,
  
    "location": "New York"
  ,
  
    "name": "Jenna"
  
]

const filtered = dataArray.filter(x => x.hasOwnProperty('name'));

console.log(filtered);

另一种选择是使用in 运算符:

let dataArray = [
  
    "name": "David" 
  ,
  
    "location": "New York"
  ,
  
    "name": "Jenna"
  
]

const filtered = dataArray.filter(x => 'name' in x);

console.log(filtered);

【讨论】:

【参考方案3】:

您可以使用in 运算符来过滤存在的特定键,请参阅reference。

dataArr.filter(obj => 'name' in obj)

仅检查obj.name 会排除“名称”字段为falsenullundefined 的对象,即使该属性存在于对象上。

【讨论】:

这个真的很简洁。不错! 是的,请注意,例如'hasOwnProperty' in === true 以及其原型链中的所有其他属性

以上是关于根据对象中键的名称过滤对象数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

更改数组中键的名称

过滤的对象数组,nuxt,vue js

ES6映射对象数组,以返回具有新键的对象数组[重复]

根据属性值用 lodash 过滤对象数组

NodeJS通过键的值在数组中查找对象[重复]

如何根据另一个对象数组的值获取一个对象数组键的值?