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);
相关推荐
charlie1145141913 分钟前
快速Git教程
开发语言·git·学习·版本控制
2401_860494704 分钟前
在React Native中开发进度条组件,可以使用多种方式来实现,包括使用内置的`ProgressViewharmony`(仅限harmony)
javascript·react native·react.js
snowfoootball5 分钟前
java面向对象进阶
java·开发语言
weixin_307779139 分钟前
Jenkins JUnit插件:自动化测试报告与质量守护者
开发语言·junit·单元测试·自动化·jenkins
凌霜残雪10 分钟前
将 C# 项目打包为单一 EXE 的完整指南
开发语言·c#·fody.costura
csbysj202010 分钟前
Highcharts 测量图:深入解析与最佳实践
开发语言
一人の梅雨10 分钟前
淘宝商品详情接口深度解析:从 Sign 签名动态生成到多端数据全息重构
开发语言·javascript·重构
海上彼尚12 分钟前
React18+快速入门 - 1.响应式机制之 useState 和 useReducer
前端·javascript·react.js
番石榴AI13 分钟前
纯 Java 实现的 OCR 推理系统:JiaJiaOCR,告别 exe/dll 依赖!
java·开发语言·ocr
小c君tt13 分钟前
FFmpeg在QT中的使用3
开发语言·qt·ffmpeg