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

127
Visualizações
Encuentre nombres duplicados dentro de una variedad de archivos diferentes

Un caso de uso un poco diferente de los que me sugirieron anteriormente. Necesito recorrer y verificar cada nombre de archivo dentro de una matriz de archivos y enviar los archivos que tienen el mismo nombre a una nueva matriz para poder cargarlos más tarde por separado.

Este es mi código hasta ahora, y seguramente tengo un problema con mi verificación condicional, ¿alguien puede ver lo que estoy haciendo mal?

 filesForStorage = [ {id: 12323, name: 'name', ...}, {id: 3123, name: 'abc', ...}, {id: 3213, name: 'name', ...}, ... ] filesForStorage.map((image, index) => { for (let i = 0; i < filesForStorage.length; i++) { for (let j = 0; j < filesForStorage.length; j++) { if ( filesForStorage[i].name.split(".", 1) ===. //.split('.', 1) is to not keep in consideration the file extension filesForStorage[j].name.split(".", 1) ) { console.log( "----FILES HAVE THE SAME NAME " + filesForStorage[i] + " " + filesForStorage[j] ); } } }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Usar el map sin devolver nada lo hace casi inútil. Puede usar forEach pero eso es igualmente inútil cuando está usando un bucle doble dentro: significa que estaría haciendo un bucle una vez en el foreach (o map en su caso) y luego dos veces más dentro, lo que hace que el rendimiento sea increíblemente malo.

Lo que realmente está tratando de hacer es agrupar sus elementos por name y luego elegir cualquier grupo con más de 1 elemento

 const filesForStorage = [ {id: 12323, name: 'name'}, {id: 3123, name: 'abc'}, {id: 3213, name: 'name'} ] const grouped = Object.values( filesForStorage.reduce( (a,i) => { a[i.name] = a[i.name] || []; a[i.name].push(i); return a; },{}) ); console.log(grouped.filter(x => x.length>1).flat());

about 4 years ago · Juan Pablo Isaza Relatório

0

JavaScript tiene varias funciones que realizan una iteración "oculta".

  • Object.values a través de un objeto de pares clave-valor y recopilará todos los valores en una matriz
  • Array.prototype.reduce iterará a través de una matriz y realizará un cálculo para cada elemento y finalmente devolverá un valor único
  • Array.prototype.filter iterará a través de una matriz y recopilará todos los elementos que devuelvan verdadero para una prueba específica
  • Array.prototype.flat iterará a través de una matriz, concatenando cada elemento con el siguiente, para crear una nueva matriz aplanada

Todos estos métodos son un desperdicio, ya que puede calcular una colección de duplicados con un solo paso sobre la matriz de entrada. Además, los métodos de matriz ofrecen el rendimiento O(n) en el mejor de los casos, en comparación con el rendimiento O(1) de Set o Map, lo que hace que la elección de matrices para este tipo de cálculo sea increíblemente mala:

 function* duplicates (files) { const seen = new Set() for (const f of files) { if (seen.has(f.name)) yield f else seen.add(f.name, f) } } const filesForStorage = [ {id: 12323, name: 'foo'}, {id: 3123, name: 'abc'}, {id: 3213, name: 'foo'}, {id: 4432, name: 'bar'}, {id: 5213, name: 'qux'}, {id: 5512, name: 'bar'}, ] for (const d of duplicates(filesForStorage)) console.log("duplicate name found", d)

 duplicate name found { "id": 3213, "name": "foo" } duplicate name found { "id": 5512, "name": "bar" }
about 4 years ago · Juan Pablo Isaza Relatório

0

Un bucle anidado puede ser muy costoso en rendimiento, especialmente si su matriz tendrá muchos valores. Algo así sería mucho mejor.

 filesForStorage = [ { id: 12323, name: 'name' }, { id: 3123, name: 'abc' }, { id: 3213, name: 'name' }, { id: 3123, name: 'abc' }, { id: 3213, name: 'name' }, { id: 3123, name: 'random' }, { id: 3213, name: 'nothing' }, ] function sameName() { let checkerObj = {}; let newArray = []; filesForStorage.forEach(file => { checkerObj[file.name] = (checkerObj[file.name] || 0) + 1; }); Object.entries(checkerObj).forEach(([key, value]) => { if (value > 1) { newArray.push(key); } }); console.log(newArray); } sameName();

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