4

以前に解決されたと確信している配列の問題に苦しんでいます。私が考えることができる最良の類推は、2 ~ 3 個の製品が選択され、ユーザーが比較できるようにそれらの特性が一覧表示される製品比較機能です。

私は2〜3個の特徴を持っています。配列は同じ特性を持つことができます。要素が「最も一般的な」順に並べられた配列のテーブルを並べて表示する必要があります。したがって、3 つのアレイすべてが同じ特性を持っている場合、それが一番上になります。次に、2 つの類似した特性がリストされます。2 つの配列が特性を共有している場合、3 番目の配列には空白のセルが含まれます。

バックエンドは PHP で書かれています。フロントエンドは Javascript です。他の機能にアンダースコアを使用しているため、配列関数が利用可能です。

これを機能させるためにやらなければならないことの組み合わせについて頭を悩ませることはできません! どんな助けでも大歓迎です!

4

3 に答える 3

1

この問題をカバーすると思われる解決策を見つけることができました.2次構造を使用して各カテゴリの頻度を記録するという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

製品からマージarray_keys()して比較し、キー (== "characteristics") をループして、たとえば 3 つの新しい配列 ("shared"、"common"、"uncommon") に分類できます。

その配列を使用して、製品配列を再構築し、使用されていないキーのフィールドを空にします。

于 2012-04-09T17:05:52.407 に答える
0

私が正しく理解しているかどうかはわかりませんが、各配列の「特性」がソートされ、最も共有されているものが一番上にリストされるように、複数の配列のアイテムをソートしようとしている場合は、共有特性カウントを実装するために使用する二次配列がありませんか? したがって、配列の最初のセットをループし、各特性が見つかると、その特性のカウンターをインクリメントします。

次に、表示ルーチンを使用しているときに、特性カウントを集計するために使用した配列に対してループ ルーチンを実行しますか?

于 2012-04-09T12:51:46.393 に答える