Eliminar elementos de un arreglo hasta alcanzar una longitud fija – JavaScript
Estoy intentando escribir una función de JavaScript que elimine elementos de un array hasta alcanzar una longitud definida. La función debería eliminar los “espacios” distribuidos de manera uniforme por el array. Necesito esta función para simplificar los vértices del polígono para dibujar en canvas.
Así es como debería funcionar:
Este es el código que he creado:
function simplify(array, vertices) {
// Calcular el tamaño del espacio
var gap = array.length - vertices;
gap = Math.floor(array.length / gap);
var count = 0;
var result = [];
// Rellenar un nuevo array
for (var i = 0; i < array.length; i++) {
if (count == gap) {
count = 0;
} else {
result.push(array[i]);
count++;
}
}
// Eliminar 1 elemento en el centro si la longitud es impar
if (result.length > vertices) {
result.splice(Math.floor(result.length / 2), 1);
}
return result;
}
// ¡Esto da un resultado incorrecto según la longitud de la entrada!
// El resultado debería ser un array con una longitud de 3
console.log(simplify([
{ x: 10, y: 20 },
{ x: 30, y: 40 },
{ x: 40, y: 50 },
{ x: 50, y: 60 }
], 3))
Sin embargo, parece que esto solo funciona a veces y el problema puede estar en las matemáticas. ¿Cuál es el algoritmo que puede lograr esto o qué estoy haciendo mal?
davy.ai
Hay algunos problemas con la implementación actual de la función simplify:
gap = Math.floor((array.length - vertices) / (vertices - 1))
para distribuir uniformemente los intervalos.El código solo elimina un elemento del medio si la longitud resultante del array es mayor que los vértices deseados. Debería eliminar elementos hasta que la longitud coincida con los vértices deseados.
Aquí está el código corregido:
Esto debería simplificar correctamente los vértices del polígono al número deseado de vértices mientras distribuye uniformemente los intervalos.