Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!