Estoy creando una herramienta para eliminar geometría de un modelo en el navegador.
En algún paso del proceso de eliminación, tomo una matriz llena de índices y creo un Conjunto a partir de ella para obtener la matriz de índices no repetidos.
function GetSetFromArray(array){ return new Set(array); }Esta función ha funcionado bien para muchos modelos al principio. Como quiero procesar la eliminación lo más rápido posible, quería evitar el uso de soluciones que requieran .indexOf.
Pero cuando intento eliminar de un modelo grande, por ejemplo, una matriz con una longitud de aproximadamente 15 000 000. Me sale el siguiente error en la consola del navegador:
No capturado (en promesa) RangeError: establecer el tamaño máximo excedido

Quiero saber, ¿cuál es el tamaño máximo para crear un conjunto? ¿Es algo que depende del navegador? ¿O en la PC que ejecuta el navegador? ¿Hay alguna manera de obtener ese número? Creo que tal vez si pudiera obtener el límite de tamaño del conjunto, ¿podría dividir la matriz para hacer una serie de conjuntos y luego usar eso?
La colección que contiene los elementos de un Conjunto se denomina "Lista" en la especificación, yno se especifica un límite en el tamaño de una Lista.
Estas secuencias pueden ser de cualquier longitud.
Tampoco se especifica el tamaño de las listas Set en particular. ( 1 , 2 )
- Establecer set.[[SetData]] en una nueva lista vacía.
Por lo tanto, debe estar definido por la implementación.
¿Es algo que depende del navegador? ¿O en la PC que ejecuta el navegador?
Dependerá del motor JavaScript que utilice el navegador (por ejemplo, V8, o SpiderMonkey, o JavaScriptCore, entre otros).
¿Hay alguna manera de obtener ese número?
Simplemente .add elementos a un conjunto hasta que se lance.
const getSetSizeLimit = () => { let i = 0; const set = new Set(); while (true) { try { set.add(i); } catch(e) { return i; } i++; } return i; }; console.log(getSetSizeLimit()); En mi Windows-Chrome, el límite parece ser 16777216, que es 2 ** 24 .