根据对象中键的名称过滤对象数组



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

假设一个数组如下:

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

我想要得到的只是一个key为"name"的数组:

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

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

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

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

使用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)));

您可以使用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);

您可以使用in运算符来筛选存在的特定键,请参阅参考。

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

只有检查obj.name才能排除"name"字段为falsenullundefined的对象,即使该属性存在于对象上。

最新更新