Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

538
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda