对公共属性数组进行排序
Sorting common array of attributes
我正在努力解决一个数组问题,我相信这个问题以前已经解决了。 我能想到的最好的类比是产品比较功能,其中选择了 2-3 种产品并列出它们的特性供用户比较。
我有 2-3 个特征数组。 数组可以具有相同的特征。我需要并排显示数组表,其中元素按"最常见"排序。因此,如果所有三个数组都具有相同的特征,它将位于顶部。 然后列出两个相似的特征,等等。 如果两个数组共享一个特征,则第三个数组将有一个空白单元格。
后端是用 PHP 编写的。前端是Javascript。 我正在使用下划线实现其他一些功能,因此它的数组函数可用。
我只是无法理解我必须做的事情的组合才能完成这项工作! 任何帮助将不胜感激!
我设法找到了一个我认为涵盖这个问题的解决方案,根据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',
}
];
如果我理解正确,我不确定我是否理解正确,但是如果您尝试对多个数组中的项目进行排序,以便对每个数组的"特征"进行排序,其中共享最多的列在顶部,那么您是否可以没有用于实现共享特征计数的辅助数组?因此,您将遍历第一组数组,并在找到每个特征时,递增该特征的计数器。
然后,当您在显示例程上时,您会在用于统计特征计数的数组上有一个循环例程吗?
你可以合并产品中的array_keys()
进行比较,然后循环访问键(=="特征"),并将它们分类为三个新数组("共享"、"通用"、"不常见")。
有了该数组,重建产品数组,为未使用的键留下空字段。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在数组的 2/3 上调用自身的排序算法
- 数组值的排序以匹配另一个数组ES6
- 按不同项目对对象数组进行排序
- 根据Javascript中的字符串值对数组的数组进行排序
- 在不同的javascript数组中对json响应进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 使用jquery根据数组对表行进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- Javascript按数字顺序排序()数组
- Javascript排序索引链接数组
- 在jquery中对时间数组进行排序
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- Javascript中的多维数组排序索引问题
- 如何在mongodb中根据数组内容的差异进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- 数组数据排序类似mysql查询
- 在小于O(n)时间内找到(排序)数组中的重复元素