Javascript zählt eindeutige Werte der Objekteigenschaft in einem Objektarray [Duplikat]

Sep 15 2020

Wie berechne ich die eindeutigen Werte einer Objekteigenschaft, wenn ich ein Array von Objekten habe?

let organisations = [
  {
    "id": 1,
    "name": "nameOne",
  },
  {
    "id": 2,
    "name": "nameTwo",
  },
  {
    "id": 3,
    "name": "nameOne",
  }
]

Wie berechne ich in diesem Fall die Anzahl der eindeutigen Organisationsnamen? Die Antwort hier ist zwei, weil es zwei eindeutige Namen gibt.

Das funktioniert nicht

 var counts = this.filteredExtendedDeals.reduce(
        (organisations, name) => {
          counts[name] = (counts[name] || 0) + 1;
          return counts;
        },
        {}
      );
      return Object.keys(counts);

Antworten

2 Mr.Polywhirl Sep 15 2020 at 15:24

Sie könnten die Liste in eine reduzieren Setund dann die greifen size.

const organisations = [
  { "id": 1, "name": "nameOne" },
  { "id": 2, "name": "nameTwo" },
  { "id": 3, "name": "nameOne" }
];

const uniqueItems = (list, keyFn) => list.reduce((resultSet, item) =>
    resultSet.add(typeof keyFn === 'string' ? item[keyFn] : keyFn(item)),
  new Set).size;

console.log(uniqueItems(organisations, 'name'));
console.log(uniqueItems(organisations, org => org.name));