笛卡尔积
2017-03-15 本文已影响532人
ForsonLim
之前写一个SKU的插件,用到了【笛卡尔积】
,明白其原理,但是就是写不出来
看来功力尚浅,需要努力
后来借鉴了网上的代码,还是把插件写出来了。就是【笛卡尔积】
的代码实现看的不是很很懂,这里将代码贴出来,如果懂的朋友帮忙解释一下:
function cartesian(elements) {
if (!Array.isArray(elements))
throw new TypeError();
var end = elements.length - 1,
result = [];
function addTo(curr, start) {
var first = elements[start],
last = (start === end);
for (var i = 0; i < first.length; ++i) {
var copy = curr.slice();
copy.push(first[i]);
if (last) {
result.push(copy);
} else {
addTo(copy, start + 1);
}
}
}
if (elements.length)
addTo([], 0);
else
result.push([]);
return result;
}
运行结果
由于该代码的作者没有做出详细的说明,我也看的不是很明白,所以请高手赐教。
如果需要在下的sku插件代码,可以这边拿GITHUB-LINFUSHAN
里面有两个,实现的方式也是不同,一个是网上查的,index02则是自己写的。
还是那句话,有看懂上面代码的高手,还是不吝赐教。。。