2016-10-06 14 views
1

jQueryアイソトーププラグインを使用して要素をソートしてフィルタリングしています。要素は、複数のフィルタグループを持つ製品です。私は1つの問題に直面している、私は同じグループの例でマルチセレクトフィルタ属性で製品をフィルタリングする必要があります:コードロジックjavascript配列

フィルタグループ:性別、製品カテゴリ、製品素材。

サンプル選択:メンズ、バッグ、レザー。

上記のサンプルは正常です。

しかし、私は

新しいフィルタ選択のようなものが必要です。男性、バッグ、財布、革、Rexinを。

あなたが気づいたら、バッグとウォレットは同じグループのものです。レザーとレキシンは同じグループの人です。これを行うための

私は

filtervalueのように通過させるフィルタ値を必要とする - .men.bag.leather、.men.wallet.leather、.men.bag.rexin、.men.wallet.rexin 。

これは簡単ですが、私はこれをコード化するのが難しいと思っています。

Iは、私が必要とするすべてを含む各グループで1つの文字列に複数のフィルタアレイをユーザが特定のフィルタを選択または選択解除するとき私は、本質的に

を更新していた各フィルタ群のアレイ結合またはグループ化された

要素は各配列から取り除かれ、各グループはコンマで区切られます。 JavaScriptで

アレイ:

var gender = ['.men']; 
var type = ['.bag','.wallet']; 
var material = ['.leather','.rexin']; 
Output: 
".men.bag.leather,.men.wallet.leather,.men.bag.rexin,.men.wallet.rexin" 

私は私が必要なものを明確にしています願っています。

大変助けになりました。

更新:

フィルタが異なる製品に変えることができますので、私は性別のようにハードコーディングさ変数を使用することができません、種類などだからではなく、私はフィルタ配列を使用しています

var selectedFilter = []; 
selectedFilter['gender'] = ['.men']; 
selectedFilter['type'] = ['.bag','.wallet']; 
selectedFilter['platform'] = ['.leather','.rexin']; 

のような出力を必要とします、 ".men.bag.leather、.men.wallet.leather、.men.bag.rexin、.men.wallet.rexin"

1つの配列変数を直接渡すことができる関数が必要です。 like

combine(selectedFilter); 

答えて

2

あなたは組み合わせアルゴリズムを使用できます。

function combine(object) { 
 
    function c(part, index) { 
 
     array[index].forEach(function (a) { 
 
      var p = part.concat([a]); 
 
      if (p.length === array.length) { 
 
       r.push(p.join('')); 
 
       return; 
 
      } 
 
      c(p, index + 1); 
 
     }); 
 
    } 
 

 
    var array = Object.keys(object).map(function (k) { return object[k]; }), 
 
     r = []; 
 

 
    c([], 0); 
 
    return r.join(); 
 
} 
 

 
var selectedFilter = {       // use an object instead of 
 
     gender: ['.men'],      // an array with properties 
 
     type: ['.bag','.wallet'], 
 
     platform: ['.leather','.rexin'] 
 
    }; 
 

 
console.log(combine(selectedFilter));

+1

おかげニーナ。今はうまくいく。 – uday8486