我正在使用jQuery同位素插件来排序和过滤元素。元素是具有多个过滤器组的产品。我面临一个问题,我需要在同一组示例中过滤具有多选过滤器属性的产品:
过滤器组:性别,产品类别,产品材料。
样品选择:男士,皮包,皮革。
上面的示例工作正常。
但是我需要这样的东西
新的过滤器选择:男士,箱包,钱包,皮革,Rexin。
如果您发现Bag和Wallet来自同一组。皮革和Rexin来自同一组。
为此,我需要像这样传递过滤器值
filtervalue-.men.bag.leather,.men.wallet.leather,.men.bag.rexin,.men.wallet.rexin。
这听起来很简单,但是我发现很难对此进行编码。
我有每个过滤器组的数组,当用户选择或取消选择特定过滤器时,我将对其进行更新
因此,从本质上讲,我需要将多个过滤器数组组合或分组为一个字符串,每个组包含每个数组中的每个元素,并且每个组用逗号分隔。
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”
需要一些可以直接传递一个数组变量的函数。喜欢
combine(selectedFilter);
您可以使用组合算法。
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));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句