Tengo un objeto que contiene nombres y edades de personas.
{"John":44,"Sarah":23,"Bob":43,"Kate":65,"Bill":18}y una matriz que proporciona una lista de nombres de empleados
['John', 'Bob', 'Kate', 'Bill', 'Fred']Me gustaría crear un nuevo objeto que contenga solo aquellas personas y sus edades que aparecen tanto en el objeto como en la matriz. Entonces, en este ejemplo, el nuevo objeto contendría
{"John":44,"Bob":43,"Kate":65,"Bill":18} "Sarah":23 y Fred no aparecen porque aparecen solo en uno de los anteriores.
¿Alguien puede aconsejarme sobre cómo hacer esto, por favor?
Puede usar reduce para crear el resultado y el operador in verificar si existe la clave:
const obj = {"John":44,"Sarah":23,"Bob":43,"Kate":65,"Bill":18}; const keys = ['John', 'Bob', 'Kate', 'Bill', 'Fred']; const result = keys.reduce((acc, el) => { if (el in obj) acc[el] = obj[el]; return acc; }, {}); console.log(result);Otro enfoque es convertir el objeto en una matriz, usar el filtro y volver a convertir el resultado:
const obj = {"John":44,"Sarah":23,"Bob":43,"Kate":65,"Bill":18}; const keys = ['John', 'Bob', 'Kate', 'Bill', 'Fred']; const result = Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key))); console.log(result);simplemente
const jso = { John: 44, Sarah: 23, Bob: 43, Kate: 65, Bill: 18 } , arr = [ 'John', 'Bob', 'Kate', 'Bill', 'Fred' ] , res = arr.reduce((r,a)=>(!!jso[a]?r[a]=jso[a]:'',r),{}) ; console.log(res)