La declaración while sigue arrojando un error (TypeError: no se puede leer la propiedad '8' de undefined), sin embargo, console.log aún genera el resultado que debe.
var hold = []; for (let i = 0; i < (clothes.length - 1); i++) { let count = 0; if (hold.length === 0) { hold.push(clothes[i]); } else { console.log(clothes[i][8], hold[count][8]); while (clothes[i][8] < hold[count][8]) { count++; } hold.slice(count, 0, clothes[i]); } }Esta parte del código incrementa el count más allá de la duración de la hold[]
while (clothes[i][8] < hold[count][8]){ count ++; };paso a paso manualmente:
< entonces count++ Añadir una cláusula en el while
while (count < hold.length && clothes[i][8] < hold[count][8]){ count ++; }; Tenga en cuenta que la verificación de longitud debe ser la primera, de lo contrario, obtendrá el mismo error (hay otras formas, como break el while ). La segunda parte de && solo se valora si la primera parte es true .
Tiene otros problemas para detener una solución completa:
for (let i = 0; i < (clothes.length - 1); i++){se desplazará a la longitud-1, por lo que si tiene 3 elementos, solo obtendrá dos. Necesitas usar cualquiera
i<clothes.lengthi<=(clothese.length-1)y
hold.slice(count, 0, clothes[i]); no es la sintaxis para .slice y slice devuelve una nueva matriz, no cambia la matriz en su lugar. Esto debería ser
hold.splice(count, 0, clothes[i]);Dando un fragmento actualizado:
var clothes = [[2],[1],[3]]; var hold = [] for (let i = 0; i < clothes.length; i++) { var count = 0; if (hold.length === 0) { hold.push(clothes[i]); } else { while (count<hold.length && clothes[i][0] < hold[count][0]) { count++; }; if (count == hold.length) { hold.push(clothes[i]) } else { hold.splice(count, 0, clothes[i]); } } } console.log(hold.join(","));