Elementos duplicados en array

Post image

Elementos duplicados en un array

Existen muchas formas de saber si un array tiene elementos duplicados. En la red se pueden encontrar decenas de ejemplos.

El código que se muestra a continuación viene motivado por una necesidad del trabajo. En el momento de escribir el código no sabía exactamente si quería mostrar al usuario un mensaje detallado sobre el elemento o elementos duplicados o, simplemente, mostrar un mensaje genérico advirtiendo que existía algún elemento duplicado.

Variante Boolean

/**
 *  @param  {Array} arr
 *  @returns {Boolean}
 */
function hasDuplicateValues(arr) {
  let res = {};

  arr.map((e) => {
    const key = e;
    if (!res[key]) {
      res[key] = [];
    }
    res[key].push(e);
  });

  let keys = Object.keys(res);

  keys.forEach((e) => {
    if (res[e].length > 1) return true;
  });

  return false;
}

arr = [1, 2, 3, 4]; // false
arr = [1, 2, 3, 4, 4, 3]; // true

Variante Verbose

/**
 *  @param  {Array} arr
 *  @returns {String} info
 */
function hasDuplicateValuesVerbose(arr) {
  let res = {};
  let info = [];

  arr.map((e) => {
    const key = e;
    if (!res[key]) {
      res[key] = [];
    }
    res[key].push(e);
  });

  let keys = Object.keys(res);

  keys.forEach((e) => {
    res[e].length > 1 ? info.push(e) : "";
  });

  info =
    info.length > 1
      ? "Los siguientes valores están duplicados: " + info.join(", ") + "."
      : info.length === 1
      ? "El valor " + info.join("") + " está duplicado."
      : "No hay elementos duplicados.";

  return info;
}

arr = [1, 2, 3, 4]; // No hay elementos duplicados.
arr = arr = [1, 2, 3, 4, 3]; // El valor 3 está duplicado.
arr = [1, 2, 3, 4, 3, 3, 2, 5, 1, 1, 1, 1, 6, 6]; // Los siguientes valores están duplicados: 1, 2, 3, 6.
arr = ["Aragón", "Baleares", "Cantabria", "Cantabria", "Cantabria", "Aragón"]; //Los siguientes valores están duplicados: Aragón, Cantabria.

También te puede interesar: