JavaScript ES6 - Bir nesne dizisindeki tekrarları saymak


Ürün listem için tüm üreticileri sayacak ve şöyle gösterecek bir filtre oluşturuyorum:

Elma (3)

Dizideki tekrarları kaldırdım: ["Apple","Apple","Apple"] Bu bağlantıyı kullandım:

Bir dizideki tüm benzersiz olmayan değerleri (yani: tekrar eden/ikinci veya daha fazla kez meydana gelen) alın

Ama benim sorunum, bu elemanları diziden saymak ve daha sonra üzerinde yineleme yapmam gerektiği için bir Nesneler Dizisi içinde göstermek istemem.

Yukarıdaki Bu Elmalar Dizisinden ihtiyacım olan sonuç: [{"Elma": 3},{...},{...}]

Bunu yapmaya çalışıyordum ama bana object döndürüyor ve ardından üzerinde yineleme yapamıyorum: JavaScript'te bir dizideki tekrar eden değeri nasıl sayabilirim

Bana bir Nesneler Dizisi lazım, tekrarlanmış değil

Angular 4 kullanıyorum.

Benim kodum:

component.ts

  async ngOnInit() {
    this.cart$ = await this.cartService.getCart();

    this.subscription = this.productService.getAll().subscribe(products => {
      this.category = products.filter(
        products => products.category == this.name
      );
      this.filters();
    });
  }

  filters() {
    this.category2 = this.category.map(value => value.producer);
    this.filteredArray = this.eliminateDuplicates(this.category2);
    console.log(this.filteredArray);
  }

  eliminateDuplicates(arr) {
    let i,
      len = arr.length,
      out = [],
      obj = {};

    for (i = 0; i < len; i++) {
      obj[arr[i]] = 0;
    }
    for (i in obj) {
      out.push(i);
    }
    return out;
  }

component.html

   <div *ngFor="let f of filteredArray">
      {{f}}
   </div>

Cevap #1

reduce'u diziyi özetlemek için ve map'i istenen çıktıyı oluşturmak için kullanabilirsiniz

let obj = ["Apple", "Apple", "Apple", "Orange"];

let result = Object.values(obj.reduce((c, v) => {
  c[v] = c[v] || [v, 0];
  c[v][1]++;
  return c;
},{})).map(o=>({[o[0]] : o[1]}));

console.log(result);

Cevap #2

İşte :

const array = ["a", "a", "b"]
const result = { }

for (let i = 0; i < array.length; i++) {
  result[array[i]] = (result[array[i]] || 0) + 1
}

Object.keys(result).map(key => ({ [key]: result[key] }))

O son satır bunun anahtarıdır

Bunu yapmaya çalışıyordum ama bana nesneyi döndürüyor