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

156
Vistas
Cómo copiar un archivo y renombrarlo con un número aleatorio con js

Tengo muchos archivos y necesito cambiarles el nombre con números aleatorios.

Aquí hay un ejemplo con 50 archivos (1 a 50) Encontré este código y puedo cambiar el nombre de los archivos y colocarlos en nuevas carpetas ...

PERO algunos no se copian ya que hay algunos números que se generan dos veces. Y si ejecuto el script una y otra vez, obtengo todos mis 50 archivos nuevos, pero hay algunos que están duplicados.

 const fs = require('fs'); for (let i = 1; i <= 50; i++) { function getRandomNumber(min, max) { let totalEle = max - min + 1; let result = Math.floor(Math.random() * totalEle) + min; return result; } function createArrayOfNumber(start, end) { let myArray = []; for (let i = start; i <= end; i++) { myArray.push(i); } return myArray; } let numbersArray = createArrayOfNumber(1, 50); let randomIndex = getRandomNumber(0, numbersArray.length - 1); let randomNumber = numbersArray[randomIndex]; numbersArray.splice(randomIndex, 1); fs.copyFile(`old/${i}.json`, `new/${randomNumber}.json`, (err) => {}); }

Son mis primeros pasos en js, trato de resolverlo y no estoy ... ¿Qué puedo hacer?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

El problema es que está definiendo las funciones y la matriz de numbersArray en el bucle, por lo que lo hace para cada iteración, por lo que los números se duplican. (Así que es como si no hubieras eliminado el número de la numbersArray de números)

Aquí hay una solución que usaría:

 const fs = require('fs'); const numberOfFiles = 50; // Create an array containing numbers from 1 to the numberOfFiles defined let availableNumbers = Array.from({ length: numberOfFiles }, (v, k) => k + 1); for (let i = 1; i < numberOfFiles; i++) { let randomIndex = Math.floor(Math.random() * availableNumbers.length); let randomNumber = availableNumbers[randomIndex]; fs.copyFile(`old/${i}.json`, `new/${randomNumber}.json`, (err) => { }); availableNumbers.splice(randomIndex, 1); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Necesitaba agregar un índice de inicio a la solución de norbot

 const fs = require("fs"); const startIndex = 1 const numberOfFiles = 5; // Create an array containing numbers from 1 to the numberOfFiles defined let availableNumbers = Array.from({ length: numberOfFiles }, (v, k) => k + 1); for (let i = startIndex; i < startIndex + numberOfFiles; i++) { let randomIndex = Math.floor(Math.random() * availableNumbers.length); let randomNumber = availableNumbers[randomIndex]; fs.copyFile(`old/${i}.json`, `new/${randomNumber}.json`, (err) => { }); availableNumbers.splice(randomIndex, 1); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Probé y reescribí tu código. Hay algunas cosas que ayudarían a que funcione según lo previsto.

Saqué sus funciones del código para evitar redefinir la función en cada iteración del bucle.

Agregué una matriz alreadyHit que la función gerRandomNumber verifica el número que ya se ha utilizado. Si ya se usó, usamos alguna lógica recursiva para simplemente llamar a la función nuevamente. Agregué un poco de prueba de error para evitar un bucle infinito si no quedan más números. Básicamente, si hay más de 100 intentos de hacer un número aleatorio, arrojamos un error.

Por favor, pregunte si tiene alguna pregunta 👍

 const fs = require("fs"); const alreadyHit = []; function getRandomNumber(min, max, attempts = 0) { if (attempts > 100) throw new Error("Not enough numbers probably"); let totalEle = max - min + 1; let result = Math.floor(Math.random() * totalEle) + min; if (alreadyHit.includes(result)) return getRandomNumber(min, max, attempts + 1); return result; } function createArrayOfNumber(start, end) { let myArray = []; for (let i = start; i <= end; i++) { myArray.push(i); } return myArray; } const numbersArray = createArrayOfNumber(1, 50); for (let i = 1; i <= 50; i++) { const randomIndex = getRandomNumber(0, numbersArray.length - 1); const randomNumber = numbersArray[randomIndex]; alreadyHit.push(randomIndex); fs.copyFile(`./old/${i}.json`, `./new/${randomNumber}.json`, err => { if (err) console.log("Error Found:", err); }); }
about 4 years ago · Juan Pablo Isaza 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