JavaScript ES6 - 计算对象数组的重复项

Posted

技术标签:

【中文标题】JavaScript ES6 - 计算对象数组的重复项【英文标题】:JavaScript ES6 - count duplicates to an Array of objects 【发布时间】:2018-09-15 13:03:03 【问题描述】:

我正在为我的产品列表创建一个过滤器来统计所有生产者并显示如下:

苹果 (3)

我从数组中删除了重复项:["Apple","Apple","Apple"] 我使用了这个链接:

Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array

但我的问题是我想从数组中计算这些元素并将它们显示在对象数组中,因为我需要稍后对其进行迭代。

从上面的这个苹果数组中我需要结果:["Apple": 3,...,...]

我试图这样做,但它返回了我 object 并且我无法在它之后进行迭代: How to count duplicate value in an array in javascript

我需要一个对象数组它不是重复的

我正在使用 Angular 4。

我的代码:

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>

【问题讨论】:

我在上面描述了这个链接,这不是我要找的 【参考方案1】:

这里:

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] ))

最后一行是

的关键

我试图这样做,但它返回了我的对象

【讨论】:

【参考方案2】:

您可以使用reduce 来汇总数组并使用map 来形成所需的输出

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);

【讨论】:

太棒了! :) 它也有效,但塞巴斯蒂安是第一个,非常感谢你!【参考方案3】:

你可以简单地使用 Lodash countBy 函数来做到这一点

  filters() 
    this.category2 = this.category.map(value => value.producer);
    this.filteredArray = _.countBy(this.category2);
    console.log(this.filteredArray);
// Object Apple: 3, Orange: 1
  

【讨论】:

以上是关于JavaScript ES6 - 计算对象数组的重复项的主要内容,如果未能解决你的问题,请参考以下文章

javascript es6 多维数组对象相同属性值{key:value}的求和

javascript es6 多维数组对象相同属性值{key:value}的求和

在Javascript中将对象转换为包含多个对象的数组的理想方法是啥? (允许 ES6)

在 ES6 深度嵌套的对象的 javascript 数组中查找值

JavaScript ES6 - 数组扩展

是否有一种在JavaScript ES6中初始化数组的功能方法?