4

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

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

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

我只是无法理解为完成这项工作而必须做的事情的组合!任何帮助是极大的赞赏!

4

3 回答 3

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',
    }
];
于 2012-08-16T10:02:16.887 回答
0

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

然后,当您在显示例程中时,您将有一个循环例程在您用来计算特征计数的数组上工作?

于 2012-04-09T12:51:46.393 回答
0

您可以从产品中合并array_keys()以进行比较,然后遍历键(==“特征”)并将它们分类为例如三个新数组('shared'、'common'、'uncommon')。

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

于 2012-04-09T17:05:52.407 回答