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

521
Views
Encuentre la variante 'más clicada' en una matriz de objetos, dada una matriz anidada de variantes en Javascript

Tengo una serie de objetos llamados articles . Un artículo tiene 3 propiedades importantes. name , clicks y variants . La propiedad variants también es una matriz de objetos que contienen name (corresponde a un artículo en la matriz articles ). ¿Cuál es la forma más eficaz de encontrar la variante con más clics de cada artículo?

Pensé que tal vez había alguna forma de usar un mapa o un operador de propagación, pero no entiendo la sintaxis. Creo que podría crear un 'diccionario' con el artículo con más clics para cada conjunto, pero ¿hay alguna manera más fácil?

Aporte:

 [ {name: "article1", clicks: 10, variants: ["article2", "article3"]}, {name: "article2", clicks: 7, variants: ["article1", "article3"]}, {name: "article3", clicks: 15, variants: ["article1", "article2"]}, {name: "article4", clicks: 3, variants: ["article5"]}, {name: "article5", clicks: 6, variants: ["article4"]}, ]

Salida deseada:

 {name: "article1", clicks: 10, variants: ["article2", "article3"], mostClickedVariant: "article3"} {name: "article2", clicks: 7, variants: ["article1", "article3"], mostClickedVariant: "article3"},

etc. para cada artículo

about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

Pruebe esto (agregué todos los comentarios descriptivos en el fragmento de código a continuación) :

 // Input array const arr = [ {name: "article1", clicks: 10, variants: ["article2", "article3"]}, {name: "article2", clicks: 7, variants: ["article1", "article3"]}, {name: "article3", clicks: 15, variants: ["article1", "article2"]}, {name: "article4", clicks: 3, variants: ["article5"]}, {name: "article5", clicks: 6, variants: ["article4"]}, ]; // Iterating over an input array. const res = arr.map(obj => { // Fetching variant objects in an array based on the variants name we have in the array. const variantArr = obj.variants.map(variant => arr.find(o => o.name === variant)); // Getting most clicked variant object by sorting the variantArr in desc order based on the clicks. const mostClickedVariant = variantArr.sort((a, b) => b.clicks - a.clicks)[0]; // creating a new property 'mostClickedVariant' in each obejct and assigning the name of the most clicked variant. obj.mostClickedVariant = mostClickedVariant.name; return obj; }); // Expected output console.log(res);

about 4 years ago · Santiago Gelvez Report

0

¡Bienvenido a StackOverflow! Realice el recorrido , visite el centro de ayuda e infórmese sobre cómo hacer buenas preguntas . Después de investigar un poco y buscar temas relacionados con SO, pruébelo usted mismo. Si está atascado, publique un ejemplo mínimo reproducible de su intento y anote exactamente dónde está atascado. La gente estará encantada de ayudar.


Debido a que alguien ya ha publicado una respuesta funcional, no reprimiré mi enfoque, que es bastante diferente de ese. Por lo general, lo haría hasta que el autor de la pregunta muestre más esfuerzo.

Esta versión no muta el original, solo devuelve una copia con las nuevas propiedades agregadas. También utiliza una forma más eficiente de encontrar máximos, reduciendo la lista a su máximo en tiempo O (n) , en lugar de usar una sort O (n log n) .

 const maxBy = (fn) => (xs) => xs .reduce ( ({m, mx}, x, _, __, v = fn (x)) => v > m ? {m: v, mx: x} : {m, mx}, {m: -Infinity} ) .mx const addMostClicked = ( articles, index = new Map (articles .map (({name, clicks}) => [name, clicks])), findMax = maxBy((x) => index .get (x)) ) => articles .map ( (article) => ({... article, mostClickedVariant: findMax (article .variants)}) ) const articles = [{name: "article1", clicks: 10, variants: ["article2", "article3"]}, {name: "article2", clicks: 7, variants: ["article1", "article3"]}, {name: "article3", clicks: 15, variants: ["article1", "article2"]}, {name: "article4", clicks: 3, variants: ["article5"]}, {name: "article5", clicks: 6, variants: ["article4"]}] console .log (addMostClicked (articles))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Primero creamos un índice que asigna los nombres de los artículos a sus recuentos de clics y, utilizando el asistente maxBy , creamos una función, findMax , que encontrará el nombre asociado con el mayor recuento de clics.

Luego, simplemente asignamos los elementos y devolvemos copias con las nuevas propiedades mostClickedVariant determinadas llamando a findMax con la lista de nombres de variantes.

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!