【问题标题】:Sorting common array of attributes对属性的公共数组进行排序
【发布时间】:2012-04-09 11:31:17
【问题描述】:

我正在努力解决一个我确信以前已经解决的数组问题。我能想到的最好的类比是产品比较功能,其中选择了 2-3 个产品并列出了它们的特性供用户比较。

我有 2-3 个特征数组。阵列可以具有相同的特性。我需要并排显示一个数组表,其中元素按“最常见”排序。因此,如果所有三个数组都具有相同的特征,它将位于顶部。然后会列出两个相似的特征,以此类推。如果两个数组共享一个特征,则第三个数组将有一个空白单元格。

后端是用 PHP 编写的。前端是Javascript。我将下划线用于其他一些功能,所以它的数组函数可用。

我无法理解为完成这项工作而必须做的事情的组合!非常感谢任何帮助!

【问题讨论】:

  • 您能否发布您的数组结构,以便我们了解您的数组结构。会有很大帮助。
  • 如何获取数据?可能数据库排序更合适。
  • characteristics 是什么意思???

标签: php javascript arrays algorithm underscore.js


【解决方案1】:

我设法找到了一个我认为可以解决这个问题的解决方案,使用了 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',
    }
];

【讨论】:

    【解决方案2】:

    如果我理解正确,我不确定我是否理解,但是如果您尝试对多个数组中的项目进行排序,使每个数组的“特征”被排序,最共享的列在顶部,那么您是否可以没有用于实现共享特征计数的辅助数组?因此,您将遍历您的第一组数组,并在找到每个特征时,为该特征增加一个计数器。

    那么,当您在显示例程中时,您会在用于计算特征计数的数组上执行循环例程?

    【讨论】:

      【解决方案3】:

      您可以合并产品中的 array_keys() 以进行比较,然后循环遍历键(==“特征”)并将它们分类为例如三个新数组(“共享”、“常见”、“不常见”) .

      拥有该数组,重建产品数组,为未使用的键留下空白字段。

      【讨论】:

        猜你喜欢
        • 2012-11-01
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2015-03-19
        相关资源
        最近更新 更多