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

163
Views
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 answers
Answer question

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 Report

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 Report

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