求大佬!!这种是这么循环出来的

2019-01-09 23:15:12 +08:00
 duzhihao

上面的规格可以无限增加,规格值也是可以无限增加,那么下面的是怎么循环出来的类似这种


skuData: [
          {
             skuname: "",
             skus: [1, 2, 3]
         },
         {
             skuname: "",
             skus: [4, 5, 6]
         },
          {
             skuname: "",
             skus: [7, 8, 9]
         }
 ]
 

循环成[14,15,16,17,18,19,24,25,26,27,28,29,34,35,36,37,38,39]

1374 次点击
所在节点    问与答
7 条回复
duzhihao
2019-01-09 23:16:00 +08:00
求大佬给个思路,目前实在无从下手啊。
cdwyd
2019-01-09 23:21:01 +08:00
感觉有点没说清楚,只看你给的例子的话,把下面的两个列表合成一个 然后 用第一个列表里面的元素分别和合成后的元素组合就是了。
feiyuanqiu
2019-01-09 23:25:10 +08:00
什么意思?图看懂了,文字没看懂。下面的列表不就是上面设置的规格的笛卡尔积么
guiqiqi
2019-01-09 23:27:01 +08:00
刚刚写完相关功能,我这边做的 spu 生成 sku,将属性值构造多叉树,遍历全部叶子结点可得^_^
okchum
2019-01-10 04:15:56 +08:00
Cartesian product
meteor957
2019-01-10 09:41:59 +08:00
mark
duzhihao
2019-01-10 10:30:35 +08:00
多谢大佬的回答,个人水平有限还不能理解笛卡尔树的概念但是利用 js 里面的 reduce 勉强实现了效果
``` javascript

function calcDescartes (array) {
if (array.length < 2) return array[0] || [];
return [].reduce.call(array, function (col, set) {
var res = [];
col.forEach(function (c) {
set.forEach(function (s) {
var t = [].concat(Array.isArray(c) ? c : [c]);
t.push(s);
res.push(t);
})
});
return res;
});
}

console.log(calcDescartes([[1,2,3],['a','b','c'],['e','f']]));
```

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

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

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

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

© 2021 V2EX