Aprende a encontrar el valor más cercano a cero de una colección de números dentro de una matriz en JavaScript.

En los últimos días, necesitaba completar una prueba de nombre de codificación que expuso el siguiente problema que necesitaba ser resuelto:

Chaud Codingame

En este ejercicio, debes analizar registros de temperatura para encontrar el más cercano a cero. Temperaturas de muestra. Aquí, -1,7 es lo más cercano a 0. Implemente la función  closestToZeropara devolver la temperatura más cercana a cero que pertenece a la matriz ts.

  • Si ts está vacío, devuelve 0 (cero).
  • Si dos números están tan cerca de cero, considere el número positivo como el más cercano a cero (por ejemplo, si ts contiene -5 y 5, devuelve 5).
Entrada:
  • Las temperaturas siempre se expresan con números de punto flotante que van desde -273 a 5526.
  • ts es siempre una matriz válida y nunca lo es  null.

Solución

Según los datos expuestos, la siguiente implementación resuelve el problema:

/**
 * De una colección de números dentro de una matriz, devuelve el valor más cercano a cero.
 */
function closestToZero(numbers) {
    if(!numbers.length){
        return 0;
    }
    
    let closest = 0;
    
    for (let i = 0; i < numbers.length ; i++) {
        if (closest === 0) {
            closest = numbers[i];
        } else if (numbers[i] > 0 && numbers[i] <= Math.abs(closest)) {
            closest = numbers[i];
        } else if (numbers[i] < 0 && - numbers[i] < Math.abs(closest)) {
            closest = numbers[i];
        }
    }
    
    return closest;
}

Puede probar el código con diferentes ejemplos propios:

let items = [7,-10, 13, 8, 4, -7.2,-12,-3.7,3.5,-9.6, 6.5,-1.7, -6.2,7];
// Result: -1.7
console.log("Result: " + closestToZero(items));

items = [5, 6, 7, 9 , 2, - 2];
// Result: 2
console.log("Result: " + closestToZero(items));

items = [];
// Result: 0
console.log("Result: " + closestToZero(items));

Alternativamente, una de las soluciones de la comunidad incluye también esta otra opción:

function closestToZero(numbers)
{
    if (numbers.length === 0) return 0;
    
    let closest = numbers[0];

    for(let i = 0; i < numbers.length;i++){
        let number = numbers[i];
        let absNumber =  Math.abs(number);
        let absClosest = Math.abs(closest);

        if (absNumber < absClosest) 
        {
            closest = number;
        } 
        else if (absNumber === absClosest && closest < 0) 
        {
            closest = number;
        }
    }

    return closest;
}

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores