myfunction toma el objeto de una persona como entrada y devuelve un nuevo objeto que contiene el nombre, el tamaño del apellido y el peso de la persona. Si no se proporcionó el peso o el tamaño en el objeto de entrada, no debería estar presente en el objeto de salida
function myFunction(obj) { return { fn: obj.fn, ln: obj.ln, ...(obj.size && { size: `${obj.size}cm` }), ...(obj.weight && { weight: `${obj.weight}kg` }), }; } myFunction({ fn: 'Lisa', ln: 'Müller', age: 17, size: 175, weight: 67 }) No puedo entender cómo funciona ...(obj.size && { size: ${obj.size}cm }),
Puede crear objetos condicionalmente con los valores (si están presentes), u objetos vacíos (si no están presentes), luego (incondicionalmente) distribuirlos en el objeto resultante:
function myFunction(obj) { const size = obj.size ? { size: `${obj.size}cm` } : {}; const weight = obj.weight ? { weight: `${obj.weight}kg` } : {}; const {fn, ln} = obj; return {fn, ln, ...size, ...weight}; }Alternativamente (y quizás un poco menos complicado), puede crear primero el objeto de resultado y luego establecer condicionalmente los valores de propiedad:
function myFunction(obj) { const {fn, ln} = obj; const result = {fn, ln}; if (obj.size) result.size = `${obj.size}cm`; if (obj.weight) result.weight = `${obj.weight}kg`; return result; }Esto funciona debido a la " evaluación de cortocircuito " con el operador && .
Si el primer operando es falso, nada se "esparcerá" en el objeto literal. Si no es falso, el objeto {tamaño: ${obj.size}cm } se distribuirá en el objeto literal devuelto.