代码逻辑javascript数组

Code logic javascript array

本文关键字:数组 javascript 代码      更新时间:2023-09-26

我使用jQuery同位素插件来排序和过滤元素。元素是具有多个筛选器组的产品。我面临一个问题,我需要在同一组中过滤具有多选择过滤器属性的产品,例如:

过滤器组:性别、产品类别、产品材料。

样品选择:男士,手袋,皮革。

以上示例工作正常。

但是我需要像

这样的东西

新的滤镜选择:男士,包,钱包,皮革,热鑫。

如果您注意到Bag和Wallet来自同一组。皮革和热辛属于同一类。

要做到这一点,我需要像 这样传递过滤器值

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"

希望我清楚我需要什么。

非常感谢你的帮助。

更新:

由于过滤器在不同的产品上可能会有所不同,所以我无法使用硬编码的变量,如性别、类型等。所以我用的是filters array

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));