Conjuntos anidados para Javascript

En cualquier sitio moderno (y en sitios más antiguos) hay estructuras anidadas, una jerarquía de objetos, árboles. El ejemplo más común es un directorio.



Hoy en día, muchos proyectos se desarrollan utilizando Javascript. ¿Cómo almacenar estructuras de árboles en este caso? De esto es de lo que me gustaría hablar.



Ahora mi tarea es elaborar una estructura jerárquica del catálogo en función de los parámetros del producto.



Existen varios algoritmos para almacenar árboles, y los ejemplos de dichos algoritmos son Lista de adyacencia, Ruta materializada, Conjunto anidado y Tabla de cierre.



Si puede aconsejarme más, estaré encantado de escuchar y aprender.



Cuando escribí extensiones para Joomla, usé mucho el Conjunto anidado. Fue en este CMS donde conocí este modelo. Pero ahora la pila ha cambiado y ahora es Javascript. Los hábitos permanecen, y los sitios Joomla también. Es necesario transferir datos a nuevos servicios y proyectos.



Hay mucha información sobre Nested Sets en Internet y si quieres siempre puedes encontrarla, sin embargo, debo decir algunas palabras sobre este modelo de datos.



El punto del conjunto anidado es que cada nodo de la jerarquía tiene una clave izquierda y un par de claves derecha. Dependiendo de sus valores, el árbol se atraviesa. Las cualidades positivas del algoritmo, en mi opinión, son la velocidad del muestreo de datos. No hay recursividad en este algoritmo. Al mismo tiempo, para cambiar la estructura del árbol, agregar, eliminar y transferir nodos, es necesario recalcular todas las claves.



Para utilizar datos del conjunto anidado en proyectos de Javascript, necesita un módulo que pueda funcionar con este modelo.



Buscando a través de npm, encontré módulos cuya funcionalidad era buscar datos de la estructura de conjuntos anidados, es decir, todas las llaves ya deberían haber sido colocadas. Era necesario editar la estructura, pero no encontré esa oportunidad.



Otro problema es que en la mayoría de los casos, tanto los datos como la estructura del árbol se almacenan en una entidad, pero en mi opinión, es mucho más eficiente separar estas cosas.



Por lo tanto, una misma categoría (estas categorías) puede estar en diferentes padres. Esto permitirá a los usuarios encontrar lo que buscan más rápido con una jerarquía bien pensada.



Aunque desde un punto de vista SEO, habrá dos páginas con diferentes URL y el mismo contenido, pero esto se puede solucionar mediante enlaces canónicos.



Si esto no es correcto, le pido a los especialistas en SEO que me corrijan.



Al final, decidí escribir un módulo y publicarlo en npmjs.com.



Si es útil para alguien, estaré muy contento.



Ahora sigo trabajando en ello y planeo implementar la transferencia del nodo a través del árbol.



Aquí hay un enlace a npm donde puede descargar el paquete .



Aquí hay un enlace a github donde puede descargar las fuentes .



La documentación está ahí y ahí.



Cualquier comentario será bienvenido.



Le deseamos buenos proyectos y tareas interesantes.



All Articles