我设法找到了一个我认为可以解决这个问题的解决方案,使用来自 mainegreen 的建议,使用二级结构来记录每个类别的频率,以及一个自定义排序函数,它使用这个频率数组的值进行比较。下面的示例实现;
function getCategories(products) {
var categories = [], frequency = {};
for (var i = 0; i < products.length; i++) {
for (var c in products[i]) {
if (products[i].hasOwnProperty(c)) {
if (frequency.hasOwnProperty(c)) {
frequency[c]++;
} else {
categories.push(c);
frequency[c] = 1;
}
}
}
}
categories.sort(function (a,b) { return frequency[b]-frequency[a]; });
return categories;
}
这将适用于以下一系列产品;
var products = [
{
cat1: 'val1',
cat2: 'val1',
}, {
cat2: 'val2',
cat3: 'val2',
}, {
cat2: 'val3',
cat3: 'val3',
cat4: 'val3',
}
];