繁体   English   中英

如何计算每个键数组中的对象数量?

[英]How to count number of objects in an array per key?

我有一个 JavaScript 数组,其中包含以下内容:

var products = [
  {category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
  {category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
  {category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
  {category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
  {category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
  {category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];

我想计算每个键中唯一条目的数量。

例如,

  • 对于关键category ,有 2 个唯一条目。

  • 对于键name ,有 5 个唯一条目。

我尝试使用Object.keys(products).length ,但这仅给出了数组中的总行数。

我怎样才能得到计数?

您可以减少数组以获取唯一值作为减少对象的键,然后应用Object.keys() ,例如:

var categoryCount = Object.keys(products.reduce(function(r, o) {
    r[o.category] = 1;
    return r;
}, {})).length;

在 ECMAScript 2015 中,您可以使用 Set 数据结构来获取唯一值:

const categoryCount = new Set(products.map(p => p.category)).size;

您可以通过以下方式实现此目的

var map = {};

products.map(function(product){
    map[product.category] = undefined;        
});

console.log(Object.keys(map).length);

我能够通过一行代码实现相同的目标。 我不确定这是否是最有效的方法:

var categoryCount = $.unique(products.map(function (d) {return (d.category);}));
alert(categoryCount.length)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM