根据对象中键的名称过滤对象数组[重复]
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
会排除“名称”字段为false
或null
或undefined
的对象,即使该属性存在于对象上。
【讨论】:
这个真的很简洁。不错! 是的,请注意,例如'hasOwnProperty' in === true
以及其原型链中的所有其他属性以上是关于根据对象中键的名称过滤对象数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章