2012-04-09 4 views
4

私は確かに配列の問題に苦しんでいます。私が考えることができる最も良いアナロジーは、2-3の製品が選択され、それらの特性が比較されるようにリストされている製品比較機能です。一般的な属性の配列を並べ替える

私は2〜3の特性の配列を持っています。配列は同じ特性を持つことができます。私は、要素が「最も一般的」でソートされている配列を並べて表示する必要があります。したがって、3つの配列がすべて同じ特性を持つ場合は、最上部に配置されます。 2つの配列が特性を共有する場合、3番目の配列は空白のセルを持つことになります。

バックエンドはPHPで書かれています。フロントエンドはJavascriptです。私はいくつかの他の機能のためにUnderscoreを使用しているので、配列関数が利用できます。

私はこの仕事をするために必要なものの組み合わせの周りに私の頭を得ることができません!どんな助けでも大歓迎です!

+0

あなたの配列構造を投稿して、あなたの配列構造を知ることができますか?たくさん助けてくれるでしょう。 –

+0

どのようにデータを取得しますか?データベースソートがより適切である可能性があります。 – ajreal

+0

'特性'はどういう意味ですか? – Baba

答えて

1

私は、この問題をカバーするソリューションを見つけることができました。メインフレームからのアドバイスを使用して、各カテゴリの頻度を記録する二次構造と、この周波数配列の値を使って比較するカスタムソート関数。以下の実装の例。

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', 
    } 
]; 
0

私は正しくはわかりませんが、複数の配列の項目を並べ替えて、各配列の '特性'がソートされている場合、最も多くのものがリストされています次に、あなたは共有特性の数を実装するために使用するセカンダリ配列を持つことはできませんか?つまり、最初の配列セットをループし、各特性が見つかるとその特性のカウンタをインクリメントします。

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

0

これを比較してキー(== "特性")をループし、例えば3つの新しい配列( '共有'、 '共通'、 '一般的でない')に分類できます。

このアレイを使用すると、未使用のキー用の空のフィールドを残して製品アレイを再構築します。

関連する問題