Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

132
Vistas
Broma fallando una función pero no otra

Estoy escribiendo algunos desafíos diarios para mi bootcamp de codificación y me encuentro con un problema en un problema. Escribí una función que combina objetos y funciona correctamente. Esto es lo que indica el problema

Indicación: Escriba una función llamada mergeObjects que acepte al menos dos objetos como argumentos, fusione las propiedades del segundo al n objetos en el primer objeto y, finalmente, devuelva el primer objeto. Si algún objeto tiene la misma clave de propiedad, los valores de los objetos que se encuentran más adelante en la lista de argumentos deben sobrescribir los valores anteriores.

Ejemplos:

 mergeObjects({}, {a: 1}); //=> {a: 1} (same object as first arg) mergeObjects({a: 1, b: 2, c: 3}, {d: 4}); //=> {a: 1, b: 2, c: 3, d: 4} mergeObjects({a: 1, b: 2, c: 3}, {d: 4}, {b: 22, d: 44}); //=> {a: 1, b: 22, c: 3, d: 44

mi funcion

 function mergeObjects(...obj) { let obj1 = {} obj.forEach(element => { obj1 = {...obj1, ...element} }); return obj1 }

Función de solución

 function mergeObjects1(target, ...objects) { objects.forEach(function (obj) { // using ES2015's 'for in' loop for (var key in obj) { target[key] = obj[key] } }) return target }

En mi opinión, estas dos funciones proporcionan el mismo resultado. Sin embargo, cuando ejecuto mi código a través de la prueba de broma que crearon, falla en la primera prueba. Pero la solución que aportan, no falla. La prueba de broma está abajo.

 describe('15-mergeObjects', function () { it('returns same object', function () { var obj = {} expect(mergeObjects(obj, { a: 1 })).toBe(obj) }) it('adds additional properties', function () { expect(mergeObjects({ a: 1, b: 2, c: 3 }, { d: 4 })).toEqual({ a: 1, b: 2, c: 3, d: 4 }) }) it('merges props from left to right', function () { expect( mergeObjects({ a: 1, b: 2, c: 3 }, { d: 4 }, { b: 22, d: 44 }) ).toEqual({ a: 1, b: 22, c: 3, d: 44 }) }) }) describe('15-mergeObjects', function () { it('returns same object', function () { var obj = {} expect(mergeObjects1(obj, { a: 1 })).toBe(obj) }) it('adds additional properties', function () { expect(mergeObjects1({ a: 1, b: 2, c: 3 }, { d: 4 })).toEqual({ a: 1, b: 2, c: 3, d: 4 }) }) it('merges props from left to right', function () { expect( mergeObjects1({ a: 1, b: 2, c: 3 }, { d: 4 }, { b: 22, d: 44 }) ).toEqual({ a: 1, b: 22, c: 3, d: 44 }) }) })

¿Alguien puede proporcionar una explicación de por qué la función de solución pasa mientras que mi función no?

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Si bien los resultados parecen iguales, las dos funciones son ligeramente diferentes.

En su función, está creando un nuevo objeto y luego agregándole todas las propiedades requeridas.

En la función de solución, agregan propiedades al objeto de target original y luego lo devuelven.

Los objetos devueltos por ambas funciones tendrán las mismas claves y los mismos valores, pero diferentes referencias, por lo que no se consideran el mismo objeto en JavaScript.

En la prueba

 expect(mergeObjects1(obj, { a: 1 })).toBe(obj)

.toBe() verifica si dos objetos son iguales (identidad), por lo tanto, falla el caso de su función.

Tenga en cuenta que hay una prueba diferente, .toEqual() , que verifica si dos objetos tienen las mismas claves y los mismos valores (pero posiblemente referencias diferentes). Su función pasaría esta prueba

 expect(mergeObjects1(obj, { a: 1 })).toEqual(obj)
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda