Javascript实现笛卡儿积算法

在根据商品属性计算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;
}

const result = cartesian([[1, 2], ['a', 'b'], [true, false]]);
console.log(result);
相关推荐
一个没有本领的人14 分钟前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
anyup_前端梦工厂19 分钟前
初始 ShellJS:一个 Node.js 命令行工具集合
前端·javascript·node.js
5hand23 分钟前
Element-ui的使用教程 基于HBuilder X
前端·javascript·vue.js·elementui
一只自律的鸡36 分钟前
C项目 天天酷跑(下篇)
c语言·开发语言
源码哥_博纳软云40 分钟前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
GDAL40 分钟前
vue3入门教程:ref能否完全替代reactive?
前端·javascript·vue.js
沐泽Mu43 分钟前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习
小板凳-BGM1 小时前
C# 第二阶段 modbus
开发语言·ui·c#
问道飞鱼1 小时前
【Python知识】Python进阶-什么是装饰器?
开发语言·python·装饰器
长安——归故李1 小时前
【C语言】成绩等级制
c语言·开发语言