Estoy tratando de crear un objeto a partir de un objeto y una lista de propiedades.
const pick = (obj, ...fields) => { return [...fields] = obj };¿Cómo puedo darme cuenta de esto?
Reduzca la lista de campos y tome los valores del objeto original:
const pick = (obj, ...fields) => fields.reduce((acc, field) => ({ ...acc, [field]: obj[field] }), {}); const obj = { a: 1, b: 2, c: 3 }; const result = pick(obj, 'a', 'c'); console.log(result); Puede usar el operador in para ignorar propiedades que no existen en el objeto original:
const pick = (obj, ...fields) => fields.reduce((acc, field) => { const value = obj[field]; if(field in obj) acc[field] = value; return acc; }, {}); const obj = { a: 1, b: 2, c: 3 }; const result = pick(obj, 'a', 'c', 'd'); console.log(result);Prueba algo como esto:
const pick = (obj, ...fields) => Object.fromEntries(Object.entries(obj).filter(([k]) => fields.includes(k)))Iterar a través de la matriz de fields y verificar si la propiedad is available in obj y luego colocarla en el objeto final que debe devolverse.
const pick = (obj, ...fields) => { const finalObj = { }; for (field of fields) { if (obj[field]) { finalObj[field] = obj[field]; } } return finalObj; }; const obj = { name: "test name", age: 25, title: "Mr.", city: "test city" }; console.log(pick(obj, "name", "age", "city", "other"));