No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Generador automático de IDs

21/30
Recursos

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Yo lo que hice fue utilizar el método estático Date.now(), el cuál devuelve la cantidad de milisegundos transcurridos desde el primero de enero de 1970.


function newTodoId() {
  return Date.now();
}
//Devuelve el numero de milisegundos, ejemplo: 1668393426376

De esa forma, tenemos una id con un numero que nunca va a ser igual, a menos que registremos dos TODOs en el mismo milisegundo, lo que espero que para nuestro caso específico nunca suceda.

Mi solución con generators:

  function* generateId() {
        let id = toDos.length
        while (true) {
            yield id++
        }
    }

    const newTodoId = generateId()

yo solo le añadí un 0 a la función generadora de IDs

const newTodoId = (todos)=> {
  const ids = todos.map(e => e.id)
  return Math.max(0, ...ids)+1
}

¡Hola, comuniadad! 👋

Yo utilicé la librería que viene instalada en node_modules llamada uuid.

✍ Nota: Las nuevas versiones tienen a dar inconveniente con la exportación por defecto, por eso le dejo la forma de solventar el error:

import { v4 as uuid } from 'uuid';

// Y luego, la variable que creamos llamada uuid, la necesitamos ejecutar como una función. 

const id = uuid();

🤙 Y listo, así es como se solventa y se puede utilizar esta librería que trae la carpeta node_modules.

No sé si sea robusto mi manera de generar id, pero me funcionó…
Solo use el tamaño del arreglo como id

  const addTodo = text =>{
    //generando id
    const id = todos.length +1;
    const newTodos = [...todos];
    newTodos.unshift({
      completed: false,
      text,
      id,
    });
    saveTodos(newTodos);
  };

Yo use el metodo randomUUID(). Genera de manera aleatoria 36 digitos…
Dejo la info de MDN

function newTodoId(){
  return crypto.randomUUID()
}
//  ejemplo:  "36b8f84d-df4e-4d49-b662-bcde71a8764f

Yo implementé

Math.random().toString(36).splice(2)

para generar los Id’s.

Como yo he resuelto en otros lenguajes el caso de obtener el máximo id, asumiendo que la lista siempre se incrementa en 1 simplemente uso .length para ver el mayor y ese seria el nuevo id que guardo en la lista y retorno.

const todoId = []
function newTodoId(){
  const id = todoId?.length
  todoId.push(id);
  return id;
}

Esta solución implica que si se borran todos igual los ids van a seguir en aumento. Aunque, esto en crecimiento es mucho almacenamiento ocupado para una lista de id, que rápidamente se me ocurre que puede servir si se quiere saber que id han sido eliminados para tener el registro del total de eliminaciones o incluso para ver si se pueden reutilizar en el futuro

Antes de ver tu solución, hice la mía. Es menos legible y más robusta, pero funciona 👌

let greaterId = todoList.reduce((previousTodo, currentTodo) => {
      return (previousTodo.id > currentTodo.id) ? previousTodo.id : currentTodo.id;
   }, 0);
   return greaterId + 1;

A mi me pinto la compleja y agarre data que lei en los comentarios y arme uno combinando un generador de ids en forma de string con el de Date.now(), los sume y multiplique x2 y cree esto.

function newTodoId() {
  const id = Date.now()
  
  const  generateRandomString = (num) => {
    let result1= Math.random().toString(36).substring(0, num);       

    return result1;
  }

  return generateRandomString(12) + id;
}

Se puede usar el paquete uuid que viene por defecto cuando se descargan los paquetes de react y asi no es necesario crear una funcion

const addTodo = (text) => {
  const id = uuidv4();
  const newTodos = [...todos];
  newTodos.push({
    completed: false,
    text,
    id
  });
  saveTodos(newTodos);
};
function generateId(array) {
  return (array.length)?(Math.max(...array.map(el=>el.id))+1):1
}