我是初学者,所以请原谅我的无知,如果这是微不足道的。通过循环未知数量的数组创建笛卡尔积(powerset?)
我有一个未知长度的javascript对象,每个属性的值都是一个数组(对我来说也是未知长度)。例如:
var obj = {"varA":[1,2,3],
"varB":['good','bad'],
"varC":[0,100],
"varD":['low','med','high']
}
我想遍历每个属性并为每个属性值组合创建一个新对象。如果我知道可以暴力破解的属性数量 - 强制使用for循环,但有没有办法在不知道有多少循环要硬编码的情况下枚举?
我基本上想要做这样的事情:
var oblist = [];
for (a in varA){
for (b in varB){
for (c in varC){
for (d in varD){
oblist.push({"varA":varA[a], "varB":varB[b], "varC":varC[c], "varD":varD[d]});
}
}
}
}
使oblist将包含类似的对象:
{"varA":1, "varB":"good", "varC":0, "varD":"low"}
{"varA":1, "varB":"good", "varC":0, "varD":"med"}
...
{"varA":3, "varB":"bad", "varC":100, "varD":"high"}
谢谢!
编辑: 看看我没有要求for循环或索引语法帮助。我在问如果我不知道对象中属性的数量(例如,varA,varB,varC,varD,varE,我可以拥有varZZ,我知道),我该怎么办,所以我不能只是坚硬代码4 for循环。有没有一种方法来设置使用obj [Object.keys(obj)[i]]。length?
请显示您希望最终的输出数据结构看起来像您指定的'obj'输入。我没有遵循你想要的。 – jfriend00
你的意思是你想要对象中每个数组的['power set'](http://en.wikipedia.org/wiki/Power_set)?如果是这样,那么这不仅仅是对象访问(@FelixKing)的重复。 – Xotic750
嗨费利克斯,尊重你的代表和你已经链接到的答案的成功,我可以说我不认为这是一个骗局?要回答这个问题,你需要Object.keys,你的链接答案没有讨论过,还有一些逻辑将它们放在一起,以获得OP后面的组合。虽然人们经常因为询问Q版而被批评为SO,但实际上我认为这里有一个描述得很差但具体的挑战,你的优秀广泛答案实际上并没有涵盖。 – sifriday