请教一个多属性组合问题

2018-08-07 17:26:18 +08:00
 vincenth520

如图,属性组合如何显示 比如下面的这种结构的话,可以直接写死 3 层嵌套

a = [1,2]
b = [3,4]
c = [5]

for(var i in a){
    for(var j in b){
        for(var k in c){
            console.log(a[i],b[j],c[k])
        }
    }
}

---
1 3 5
1 4 5
2 3 5
2 4 5

但是属性的个数都是不定的, 假设数据结构为 a = [[1,2],[3,4],[5]...]又怎么实现呢

1217 次点击
所在节点    问与答
3 条回复
Exin
2018-08-07 17:29:38 +08:00
伪代码:

func combs(arr, ...rest):
r = []
for(var i in arr) {
r.push(...combs(...rest).map(comb => [i, ...comb]))
}
return r
}
yidinghe
2018-08-07 17:34:49 +08:00
var arr = [[1,2,3,4],[5,6,7]];
for (var i1=0; i1<arr.length;i1++) {
for(var i2=0;i2<arr[i1].length;i2++) {
console.log(arr[i1][i2]);
}
}
vincenth520
2018-08-07 18:18:24 +08:00
已经解决了.
```
var array = [['A', 'B', 'C'], 'F', ['D', 'E'], 1, 'kyo', 'yugi111'];
var len = array.length;
var results = [];
var indexs = {};
function specialSort(start) {
    start++;
    if (start > len - 1) {
        return;
    }
    if (!indexs[start]) {
        indexs[start] = 0;
    }
    if (!(array[start] instanceof Array)) {
        array[start] = [array[start]];
    }
    for (indexs[start] = 0; indexs[start] < array[start].length; indexs[start]++) {
        specialSort(start);
        if (start == len - 1) {
            var temp = [];
            for (var i = len - 1; i >= 0; i--) {
                if (!(array[start - i] instanceof Array)) {
                    array[start - i] = [array[start - i]];
                }
                temp.push(array[start - i][indexs[start - i]]);
            }
            results.push(temp);
        }
    }
}
specialSort(-1);
console.log(results);
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477686

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX