typescript - Hitta antalet unika objekt i en array i Angular 7


Säg att jag har en följande array som innehåller följande objekt:

array = [{name: 'foo', number: 1}, {name: 'foo', number: 1}, {name: 'bar', number: 1}]

Hur skulle jag gå tillväga för att hitta antalet foo i denna array? Jag gör för närvarande

search(name, array) {
    let count = 0;
    for (let i = 0; i < array.length; i++) {
      if (array[i].name=== name) {
        count++;
      }
    }
    return count;
  }

Jag skulle vilja kunna köra search()-funktionen och kunna få antalet objekt som har namnet foo och antalet objekt som har namnet bar istället för att behöva ange namnet på objektet själv.

Svar #1

let array = [{
  name: 'foo',
  number: 1
}, {
  name: 'foo',
  number: 2
}, {
  name: 'bar',
  number: 1
}]

function count(input) {
  var output = {};

  array.forEach(item => {
    if (output[item.name]) {
      output[item.name] += item.number;
    } else {
      output[item.name] = item.number;
    }
  });

  return output;
}

var result = count(array);
console.log(result);

Du kan iterera över objekten och lägga till antalet för varje namn som är detsamma. Hoppas detta är vad du letade efter, annars låt mig veta

Svar #2

Använd filter-funktionen

let array = [{name: 'foo', number: 1}, {name: 'foo', number: 1}, {name: 'bar', number: 1}]

let count = array.filter(e => e.name === "foo").length;
console.log(count)