Tengo bloques en un contenedor como el de abajo. 
si elimino un bloque (por ejemplo, 1), debería organizarse como se muestra a continuación
Supongamos que tengo todas las coordenadas de los bloques, como el ancho, la altura de cada bloque y x1, y1, x2, y2 desde arriba. Intenté usar bucles recursivos para encontrar todos los elementos debajo del eliminado y mover recursivamente todos los elementos para moverlos hacia arriba. pero no funciona como era de esperar, ya que necesito considerar la colisión (por ejemplo, si algún bloque intenta moverse hacia arriba, no debe chocar con otros bloques, si ocurre una colisión, debe estar en el mismo lugar en lugar de moverse hacia arriba) cualquier sugerencia para la solución es una gran ayuda para mí
Puede declarar un índice para cada bloque declarando la posición y el tamaño del ancho, por ejemplo, para el primer bloque puede almacenar {x: 1, y: 1, w: 2} (x es la posición desde la izquierda e y es la posición desde arriba y w es ancho de bloque que se puede especificar desde su bloque más pequeño) y cada vez que se elimina un bloque, puede volver a renderizar como: si se elimina un bloque con {x: 1, y: 1, w: 2}, busca todos los bloques y crea una condición de que si block.x y block.x + block.w están en el rango (x .. x + w) y block.y = y + 1, entonces debe reemplazar la posición superior absoluta de este bloque con la posición superior anterior - altura del bloque . Puedo ayudarte a reescribir mejor el código si compartes tu código.