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

524
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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