首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS:由和操作组合的数组的切分

JS:由和操作组合的数组的切分
EN

Stack Overflow用户
提问于 2018-10-18 11:13:59
回答 1查看 64关注 0票数 1

我用安古拉。我有下一个数据,例如:

代码语言:javascript
复制
let filters = {
                'async':[3,7],
                'gpu_freq':[400,500]
            };

是否有更好的方法来获得下面的组合,然后是多个循环?

代码语言:javascript
复制
[{
    'async': 3,
    'gpu_freq': 400
},{
    'async': 3,
    'gpu_freq': 50
},{
    'async': 7,
    'gpu_freq': 400
},{
    'async': 7,
    'gpu_freq': 500
}]

过滤器的数量可能不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 11:20:56

如果带有对象的数组再次调用getCartesian并构建新对象,则可以通过迭代这些值获得笛卡尔积。

这也适用于嵌套对象。

代码语言:javascript
复制
function getCartesian(object) {
    return Object.entries(object).reduce((r, [k, v]) => {
        var temp = [];
        r.forEach(s =>
            (Array.isArray(v) ? v : [v]).forEach(w =>
                (w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
                    temp.push(Object.assign({}, s, { [k]: x }))
                )
            )
        );
        return temp;
    }, [{}]);
}

var filters = { async: [3, 7], gpu_freq: [400, 500] },
    cartesian = getCartesian(filters);

console.log(cartesian);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52872713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档