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

263
Vistas
Javascript: la función HackerRank dentro de una función no es una función

Esta es una de esas pruebas de entrevista de trabajo en HackerRank que me avergüenza decir que no completé en los 20 minutos asignados, y me está volviendo loco. Básicamente, se le da lo siguiente:

 function myList() { // write code here } function main() { // You can't edit this function. This is just pseudo, from what I can remember const obj = myList(); if (operation === "add") obj.add(item); else if (operation === "remove") obj.remove(item); else obj.getList(); // Some more stuff here }

Así que mi primera línea de pensamiento fue escribir lo siguiente dentro de myList() :

 let objList = []; function add(item) { objList.add(item) } // etc., etc. return {add, remove, getList};

No hace falta decir que lo anterior no funcionó, con el error: obj.add is not a function , en la función main .

Intenté experimentar con this y las devoluciones (solo devolviendo add, con o sin {} ), pero realmente no llegué a ninguna parte. ¿Qué podría haber hecho para que esto funcionara?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Para obj , dentro de myList() podría haber ejecutado un cierre, que es una función de autoinvocación que devuelve, en este caso, un objeto con sus exportaciones k:v, pero con acceso privado al contexto de la persona que llama anónima ahora caducada. Con declaraciones "const add = function" , etc., puede definir valores para sus exportaciones, mientras que objList va en el contexto privado.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Como ya sugirió la respuesta de Attersson , podría usar un cierre dentro de la función myList . Esto permitiría exponer solo los tres métodos add , remove y getList mientras no se puede acceder a la lista original. Aquí hay un ejemplo:

 function myList() { return (() => { const obj = {itemList: []} const add = (item) => obj.itemList.push(item) const remove = (item) => obj.itemList = obj.itemList.filter(i => i !== item) const getList = () => obj.itemList return {add, remove, getList} })() }
about 4 years ago · Juan Pablo Isaza 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