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);
更新了任意数量组的代码
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;
}
关于javascript - 将对象连接到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236456/