JavaScript ES6 - 计算对象数组中的重复项
我正在为我的产品列表创建一个过滤器,以统计所有生产商并这样显示:
苹果 (3)
我从数组中删除了重复项:["Apple","Apple","Apple"] 我使用了这个链接:
获取数组中所有非唯一值(即重复/出现多于一次的值)
但我的问题是,我想从数组中计算这些元素的数量,并将它们显示在一个对象数组中,因为我之后需要对它进行迭代。
从上面的这个苹果数组中,我需要结果:[{"Apple": 3},{...},{...}]
我试着做这个,但它返回我一个 对象,我之后不能迭代它:如何在 JavaScript 中计算数组中的重复值
我需要一个对象数组 它没有重复
我正在使用 Angular 4。
我的代码:
组件.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;
}
组件.html
<div *ngFor="let f of filteredArray">
{{f}}
</div>
答案#1
你可以使用 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);答案#2
这里:
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] }))
最后一行是关键
我正在尝试做这个,但它返回我一个对象
