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

189
Vistas
Cómo leetcode hace esto: lea la cadena de entrada del usuario como múltiples funciones de JavaScript y ejecute una función principal con los parámetros de entrada del usuario

Estoy tratando de replicar lo que hace leetcode, como mi proyecto de aprendizaje React. A continuación se muestra mi configuración de interfaz de usuario actual.

Estoy usando AceEditor como mi editor de texto, ahora mismo puedo leer el valor del editor al cambiar.

Quiero ejecutar la función containsDuplicate cuando hago clic en el botón Run code .

Lo que tengo ahora es una cadena codeValue representa la entrada del usuario en el formato de cadena, y testCase como los parámetros de funciones en el formato de cadena también,

 // the codeValue is the complete text in the Ace Editor are const [codeValue, setCodeValue] = useState(''); // The testCase is [1,2,3,1] which reads from the TestCase section const [testCase, setTextCaseValue] = useState(''); const submitHandler = (inputParams) => { console.log(codeValue); };

¿Qué debo hacer para ejecutar la función containsDuplicate con params testCase ? Suponga que el nombre de la función es siempre containsDuplicate ?

Eval() ejecutará la cadena como función JS, pero lo que necesito es, cuando la cadena es solo una declaración de función y hay varias declaraciones de función, necesito encontrar la función correcta de la cadena y ejecutar esa función con dar entrada.

Digamos que la cadena de entrada es

 functionA() { functionB(); } functionB() { }

Necesito leer esa cadena y ejecutar functionA([1,2,3,4])

No tengo una buena manera de hacer esto ahora.

¡Gracias!

ingrese la descripción de la imagen aquí

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

0

Si el nombre de la función es fijo*, puede "extraer" la función correcta envolviendo el código de usuario en otra función y simplemente return esa función:

 const codeInput = ` function foo() { console.log('foo'); } function containsDuplicate(input) { foo(); console.log('input', input); return 42; } `; const code = new Function(codeInput + '; return containsDuplicate;')() const result = code([1,2,3]); console.log('result', result);

También puede agregar lógica adicional que verifique que containsDuplicate Duplicado antes de intentar devolverlo.


Si no quieres dictar el nombre de la función, hay un par de soluciones, más o menos complicadas:

  • Puede proporcionar un pequeño contenedor similar a CommonJS y hacer que el usuario asigne la función a module.exports .
  • Si quisiera permitir la sintaxis del módulo ES, podría usar un paquete como https://rollupjs.org y ejecutarlo en el navegador para convertir el código en algo ejecutable para usted (todavía tendría que eval / new Function ) ( también podría haber soluciones más ligeras para simplemente convertir la sintaxis del módulo ES a, por ejemplo, un IIFE).

*: Lo cual es una suposición razonable para hacer IMO. Dado que es un entorno de propósito especial, puede dictar la estructura del código y exigir que haya una función con un nombre específico.

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