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);
相关推荐
morrisonwu1 分钟前
kafka4.2对应php rdkafka扩展安装以及php的producer和consumer写法及避坑
开发语言·php
Lyyaoo.4 分钟前
【JAVA基础面经】== 和 equals() 的区别
java·开发语言·jvm
报错小能手9 分钟前
ios开发方向——swift并发进阶核心 async/await 详解
开发语言·ios·swift
青花瓷15 分钟前
采用QT下MingW编译opencv4.8.1
开发语言·qt
忆琳15 分钟前
Vue3 全局自动大写转换:一个配置,全站生效
javascript·element
赫瑞24 分钟前
Java中的日期类
java·开发语言
张元清26 分钟前
不用 Server Components 也能做 React 流式 SSR —— 实战指南
前端·javascript·面试
吕司26 分钟前
Linux线程同步
linux·服务器·开发语言
神の愛33 分钟前
java日志功能
java·开发语言·前端
Reuuse33 分钟前
基于 C++ 的网页五子棋对战项目实战
开发语言·c++