Tengo una matriz de objetos que quiero filtrar según el nombre de la clave para esos objetos. En este caso particular, sé que habrá un par clave/valor para cada elemento de la matriz.
Supongamos una matriz que se parece a esto:
let dataArray = [ { "name": "David" }, { "location": "New York" }, { "name": "Jenna" } ] Lo que quiero terminar es solo una matriz donde la key es 'nombre':
[ { name: "David" }, { name: "Jenna" } ] He intentado varias formas de hacer esto usando el método de filter , como este:
const namesArr = dataArr.filter(i => i[key] === 'name');Pero ninguno parece producir el resultado correcto.
Use el operador in para verificar si existe una propiedad en el objeto:
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)));Puede usar el operador in para filtrar por la presencia de una clave en particular, consulte la referencia .
dataArr.filter(obj => 'name' in obj) Solo verificar obj.name excluiría los objetos donde el campo 'name' es false , null o undefined , incluso si la propiedad está presente en el objeto.
Puede usar object.hasOwnProperty('name') que devuelve un valor booleano que indica si el objeto tiene un nombre de propiedad
let dataArray = [ { "name": "David" }, { "location": "New York" }, { "name": "Jenna" } ] const filtered = dataArray.filter(x => x.hasOwnProperty('name')); console.log(filtered); otra opción es usar el operador in :
let dataArray = [ { "name": "David" }, { "location": "New York" }, { "name": "Jenna" } ] const filtered = dataArray.filter(x => 'name' in x); console.log(filtered);