我有一个对象数组,我想根据这些对象的键的名称对其进行筛选。在这种特殊情况下,我知道数组中的每个元素都有一个键/值对。
假设一个数组如下:
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"字段为false
、null
或undefined
的对象,即使该属性存在于对象上。