He estado atascado en esta solución por un tiempo y no puedo resolverla, por eso estoy aquí.

Básicamente tengo una matriz, como esta:

const companies = [
  {
    name: "Company One",
    category: "Finance, Finance, Technology, Auto, Same, Same, same",
    start: 1981,
    end: 2004
  }
]

En la categoría, quiero escribir un .map o si la declaración para encontrar el valor coincide con el valor, si es así, elimine todos los valores adicionales (lo mismo, por ejemplo) y solo deje una instancia de él.

Hasta ahora lo que he hecho es esto:

const newSingles = companies.map(function(company) {
  if (company.category === company.category) {
    console.log("cats match remove and leave one");
    //This is where I am stuck?!
  };
});

Me está volviendo un poco loco ya que iba a usar .pop () pero no estoy seguro de cómo hacerlo.

¡Si alguien pudiera señalarme en la dirección correcta, eso sería as!

Gracias :)

0
user13513083 10 may. 2020 a las 21:22

4 respuestas

Pruebe Array.filter (), no use una declaración if dentro de .map ()

Tal vez esto lo ayude: https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

0
swarfey 10 may. 2020 a las 18:28

Puede usar un Set para eliminar las categorías duplicadas

const companies = [
  {
    name: "Company One",
    category: "Finance, Finance, Technology, Auto, Same, Same, same",
    start: 1981,
    end: 2004
  }
]

const s = new Set(
  companies[0]
    .category
    .replaceAll(' ', '')
    .toLowerCase()
    .split(',')
);

companies[0].category = Array.from(s.values())
                             .map(c => {
                                return c.charAt(0).toUpperCase() + c.slice(1);
                              })
                              .join(', ');

console.log(companies[0]);
0
Yousaf 10 may. 2020 a las 18:48

Debe dividir su categoría y debe encontrar los valores únicos en su lista de matriz de categorías. Intenta algo como;

var category = ["Finance", "Finance", "Technology", "Auto", "Same", "Same", "same" ];
var uniques= category.filter((item, i, ar) => ar.indexOf(item) === i);

console.log(uniques);

Con un pequeño cambio, su nueva implementación sería algo como esto;

const newSingles = companies.map(function(company) {
const category = company.category.filter((item, i, ar) => ar.indexOf(item) === i);
  return {
   ...company,
   category
  }
});

Y aquí está tu nuevo resultado;

[
  {
    name: "Company One",
    category:[ "Finance", "Technology", "Auto", "Same", "same"],
    start: 1981,
    end: 2004
  }
]
0
sulhadin 10 may. 2020 a las 18:46

Así que gracias por toda la ayuda a todos, ¡es muy amable recibir ayuda!

Si pongo todas mis categorías en su propia matriz:

const companies = [
  {
    name: "Company One",
    category: ["Finance", "Finance", "Technology", "Auto", "Same",
               "Same"],
    start: 1981,
    end: 2004
  }
]; 

Entonces haz esto:

companies.map(it => 
    it.category = it.category.reduce((previous, currItem) => {
        if (!previous.find(
                    x => x.toLowerCase() === currItem.toLowerCase()))
            previous.push(currItem);
        return previous;
    }, []));

Eso me da una salida de lo siguiente:

[
  {
    name: 'Company One',
    category: [ 'Finance', 'Technology', 'Auto', 'Same' ],
    start: 1981,
    end: 2004
  }
]

De nuevo, gracias por tu ayuda :)

0
Bob Jone 11 may. 2020 a las 08:57