【问题标题】:Code logic javascript array代码逻辑javascript数组
【发布时间】:2016-10-06 13:11:00
【问题描述】:

我正在使用 jQuery isotope 插件对元素进行排序和过滤。元素是具有多个过滤器组的产品。我面临一个问题,我需要在同一组示例中过滤具有多选过滤器属性的产品:

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

样品选择:男士、包袋、皮革。

以上示例工作正常。

但我需要类似的东西

新过滤器选择:男士、包、钱包、皮革、Rexin。

如果您注意到 Bag 和 Wallet 来自同一组。皮革和Rexin是同一组的。

为此,我需要像这样传递过滤器值

过滤器值 - .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);

【问题讨论】:

    标签: javascript arrays logic


    【解决方案1】:

    你可以使用组合算法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多