javascript - 将对象连接到数组中

标签 javascript jquery arrays javascript-objects

var groupArrays = {
    "group1" : [
        "volvo",
        "bmw",
        "audi"
    ],
    "group2" : [
        "red"
    ],
    "group3" : [
        "1991"
    ]
};

这个对象是在过滤汽车列表后创建的,我想用它创建一些 css 选择器,以便在 javascript 中使用来显示过滤的元素。所以基本上我想要的是一个带有可能选择器的数组,如下所示:

var selectors = [".volvo.red.1991", ".bmw.red.1991", ".audi.red.1991"];

如果组数未知,创建选择器数组的最简单方法是什么?

最佳答案

var groupArrays = {
    "group1": [
         "volvo",
         "bmw",
         "audi"
     ],
     "group2": [
         "red"
     ],
     "group3": [
         "1991"
     ]
};

var selectors = [];
var selector;

for (var g1 = 0; g1 < groupArrays.group1.length; g1++) {
    for (var g2 = 0; g2 < groupArrays.group2.length; g2++) {
        for (var g3 = 0; g3 < groupArrays.group3.length; g3++) {
            selector = "." + groupArrays.group1[g1] +
                        "." + groupArrays.group2[g2] +
                        "." + groupArrays.group3[g3];
            selectors.push(selector);
        }
    }
}

console.log(selectors);

JS Fiddle

更新了任意数量组的代码

var groupArrays = {
    "group1": [
        "volvo",
        "bmw",
        "audi"
    ],
    "group2": [
        "red","green"
    ],
    "group3": [
        "1991","1992"
    ]
};

var selectors = [];
var values = [];
var ga = [];

for (var group in groupArrays) {
    ga.push(groupArrays[group]);
}

traverse(ga, 0);

console.log(selectors);

function traverse(ga, index) {
    if (index >= ga.length) {
        selectors.push("." + values.join("."));

        return;
    }

    var hold = ga[index].slice(0);
    var gacopy = ga[index];

    while(gacopy.length > 0) {
        var pickedValue = gacopy[gacopy.length - 1];
        values.push(pickedValue);
        gacopy.pop();

        traverse(ga, index + 1);

        values.splice(values.indexOf(pickedValue), 1);
    }

    ga[index] = hold;
}

JS Fiddle

关于javascript - 将对象连接到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236456/

相关文章:

javascript - 为具有高时间精度的桌面创建时间敏感的浏览器应用程序的最佳方法?

javascript - knockout : click & checked bindings in one element

javascript - 获取 3 个数组元素并使它们成为单一格式的字符串

javascript - 页面加载时启动 jquery 函数

javascript - 使用jquery获取表中隐藏标签的值?

c++ - 何时使用 OOP 而不是数组

javascript - 使用 twilio javascript 客户端调用号码时捕获接受事件

javascript - 如何禁用 &lt;input&gt; 提交但不输入

javascript - 如何在 javascript 中按空格拆分字符串,除非空格出现在 "quote"之间?

arrays - 在 Swift 3 中从字典中的数组中检索随机项