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

174
Views
comprensión de la resolución en la función memo (gran front end q)

Estoy luchando para resolver una pregunta en la parte delantera grande, enlace . La tarea es implementar una función de memorización general. Encontré esta solución, pero tengo problemas para entender qué es/hace el resolutor. La primera vez que me encuentro con ese término y la búsqueda en Google no fue útil.

 function memo(func, resolver = (...args) => args.join('_')) { const cache = new Map(); return function(...args) { const cacheKey = resolver(...args); if (cache.has(cacheKey)) { return cache.get(cacheKey); } const value = func.apply(this, args); cache.set(cacheKey, value); return value; } }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No es un "resolver", sino más bien un "hash de argumentos", una función que devuelve un hash único dado un conjunto de argumentos.

La idea aquí es almacenar en caché el resultado de llamar a la función memorizada con un conjunto dado de argumentos almacenando el resultado en un mapa usando el "hash de argumentos" como clave.

(Probablemente se llame "resolver" porque permite que el memoizer resuelva las entradas de caché).

(El "resolver" predeterminado en su fragmento de código concatena ingenuamente los valores de los argumentos con el delimitador "_" . Es ingenuo porque no tiene en cuenta los casos en los que un argumento en sí mismo puede contener un "_" .)

about 4 years ago · Juan Pablo Isaza Report

0

Suponiendo que tiene una función que toma una cierta cantidad de argumentos ...

 var underlyingFunction = function(arg1, arg2, arg3){ return arg1+arg2+arg3; };

Desea crear una versión de esta función que almacene en caché los valores devueltos para valores específicos pasados, de modo que pueda omitir los cálculos y simplemente devolver el mismo valor que se devolvió la última vez que se pasaron esos mismos argumentos.

Y realmente... en lugar de codificar esta función para hacer eso específicamente, desea crear una función que pueda crear una función de almacenamiento en caché a partir de cualquier función subyacente...

Para hacer esto, necesita una función que:

  • sabe cuál es la función subyacente
  • conoce alguna forma de serializar una llamada de función
  • devuelve una nueva función en lugar de un valor

Reescribiendo su código de muestra para explicarlo más completamente

 const underlyingFunction = function(arg1, arg2, arg3) { return arg1 + arg2 + arg3; }; const serializingFunction = function(...args) { /* creates a '_' delimited string to use as unique id for that particular function call */ return args.join('_'); }; var cachingFunctionCreator = function(func, serializer) { // if serializer wasnt passed in, have it be serializingFunction serializer = serializer || serializingFunction; // to store all function call ids and their result values const cache = new Map(); // return the new function return function(...args) { // call serializing function to get the function call id const cacheKey = serializer(...args); // check to see if we've seen this id before // if so, dont call the underlying function... // just return the previously stored result for that id if (cache.has(cacheKey)) { console.log(cacheKey + ' was passed in previously'); return cache.get(cacheKey); } // otherwise, call the underlying function with the current args // store the id and result value into the map // and return the current result console.log('first time seeing: ' + cacheKey); const value = func.apply(this, args); cache.set(cacheKey, value); return value; }; }; var cachingFunction = cachingFunctionCreator(underlyingFunction); console.log('Calling underlying function'); console.log(underlyingFunction('a', 'b', 'c')); console.log('Calling cached function'); console.log(cachingFunction('a', 'b', 'c')); console.log('Calling cached function'); console.log(cachingFunction('d', 'e', 'f')); console.log('Calling cached function'); console.log(cachingFunction('g', 'h', 'i')); console.log('Calling cached function'); console.log(cachingFunction('a', 'b', 'c'));

about 4 years ago · Juan Pablo Isaza 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!