Consegui implementar um sistema de lista encadeada em javascript, de forma bastante eficiente, conseguimos atingir velocidades em loopings extremas, segue um código test
<script>
// Criação da array especial com 2000 elementos
var arrSpecial = new Array(2000);
// Criar variáveis que possam ser passadas por referencia na função intervalChangeItter
var arrInit = new Object();
var arrFinal = new Object();
// Preparar propriedade do objeto com valor inicial -1
arrInit.referencia = -1;
arrFinal.referencia = -1;
// Colocar números a serem passados
intervalChangeItter(arrSpecial, 3, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 7, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 9, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 10, arrInit, arrFinal);
// Executar o loop lista encadeada
document.write("Usando Lista Encadeada:<br/>")
for(var i = arrInit.referencia ; i != undefined; i = arrSpecial[i ]) {
document.write(i + "<br/>")
}
// Executar o for each
i = 0;
document.write("Usando Foreach:<br/>")
for(var i in arrSpecial) {
document.write(arrSpecial[i ] + "<br/>")
}
// Executar o for COMUM
i = 0;
document.write("Usando FOR comum:<br/>")
for(i = 0; i < arrSpecial.length; i++) {
document.write(arrSpecial[i ] + "<br/>")
}
// Funcao
function intervalChangeItter(array, valor, inicio, ultimoNumeroVar) {
if (array[valor] != undefined || valor == undefined)
return false;
if (inicio.referencia == -1) {
inicio.referencia = valor;
return true;
}
if (valor < inicio.referencia) {
array[valor] = inicio.referencia;
return inicio.referencia = valor, true;
}
if (array[inicio.referencia] == undefined) {
array[inicio.referencia] = valor
ultimoNumeroVar.referencia = valor
return true;
}
array[ultimoNumeroVar.referencia] = valor
ultimoNumeroVar.referencia = valor
return true;
}
</script>
Resultados:
64 ms-> Lista Encadeada
4911 ms -> Foreach
51893 ms-> For Comum
Rápido, não?
Quando puder coloco mais modificações e otimizações, por enquanto é isto