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

169
Views
¿Cómo mejorar la complejidad temporal de este fragmento?

Estoy tratando de mejorar la complejidad del tiempo y la calidad del fragmento de código a continuación. Estoy iterando a través de una matriz para verificar si el elemento de esta matriz existe en el objeto, si esto fuera cierto, debería devolver el nombre que coincide con la identificación del elemento en el objeto. ¿Cómo puedo hacer esto sin tener un bucle anidado? ¿Alguien puede decirme qué puedo hacer para mejorar este algo, por favor?

Gracias a todos de antemano.

 let genres = [28, 12, 878]; data = { genres: [ { id: 28, name: 'Action', }, { id: 12, name: 'Adventure', }, { id: 16, name: 'Animation', }, { id: 35, name: 'Comedy', }, { id: 80, name: 'Crime', }, { id: 99, name: 'Documentary', }, { id: 18, name: 'Drama', }, { id: 10751, name: 'Family', }, { id: 14, name: 'Fantasy', }, { id: 36, name: 'History', }, { id: 27, name: 'Horror', }, { id: 10402, name: 'Music', }, { id: 9648, name: 'Mystery', }, { id: 10749, name: 'Romance', }, { id: 878, name: 'Science Fiction', }, { id: 10770, name: 'TV Movie', }, { id: 53, name: 'Thriller', }, { id: 10752, name: 'War', }, { id: 37, name: 'Western', }, ], }; const getGenreName = () => { let result = []; for (let genre of data.genres) { //console.log("genre", genre.name) for (let id of genres) { //console.log('id',genres[i]) if (id === genre.id) result.push(genre.name); } } console.log(result); }; getGenreName();
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede usar reduce e includes como otros ya han mostrado. Esto hará que el código sea un poco más limpio, pero no cambiará la complejidad general del tiempo de ejecución. Para mejorar la complejidad del tiempo de ejecución, es posible que deba usar una estructura de datos diferente.

Por ejemplo en lugar de

 let genres = [1,2,3,4];

como una matriz simple, podría usar un Set , que tiene un mejor rendimiento de búsqueda.

 let genres = new Set([1,2,3,4]);

Entonces puedes usar esto de la siguiente manera

 let result = data.genres .filter(g => genres.has(g.id)) .map(g => g.name);

y no necesitará ningún explícito for bucles

about 4 years ago · Juan Pablo Isaza Report

0

La mejora más simple probablemente sería convertir genres en un Conjunto https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set y usar el método has para verificar si cada ID en los datos es un miembro del conjunto de géneros escogidos.

También puede convertir los datos en un mapa con los id como claves para buscar rápidamente por id en lugar de hacer un bucle, pero eso solo es más rápido si los datos se reutilizan muchas veces.

about 4 years ago · Juan Pablo Isaza Report

0

JavaScript #reduce en el ejemplo descrito a continuación tendría una complejidad de tiempo O(n). Esto solo recorre la matriz una vez. Podríamos usar el filtro y el mapa, pero tendríamos que recorrer la matriz dos veces.

 const getGenreName = () => { const genreSet = new Set(genres); return data.genres.reduce((accumulator, { id, name }) => { if (genreSet.has(id)) accumulator.push(name); return accumulator; }, []); }; console.log(getGenreName()); // [ 'Action', 'Adventure', 'Science Fiction' ]

Estamos inicializando el reductor para comenzar con la matriz [] , o una matriz vacía, y luego verificando si la propiedad de genre del objeto está incluida en la matriz de genres , si no lo está, devuelva el acumulador, si lo está. , agréguelo al final del acumulador y devuélvalo.

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!