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鈥檚.

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
}