我用安古拉。我有下一个数据,例如:
let filters = {
'async':[3,7],
'gpu_freq':[400,500]
};是否有更好的方法来获得下面的组合,然后是多个循环?
[{
'async': 3,
'gpu_freq': 400
},{
'async': 3,
'gpu_freq': 50
},{
'async': 7,
'gpu_freq': 400
},{
'async': 7,
'gpu_freq': 500
}]过滤器的数量可能不同。
发布于 2018-10-18 11:20:56
如果带有对象的数组再次调用getCartesian并构建新对象,则可以通过迭代这些值获得笛卡尔积。
这也适用于嵌套对象。
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);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/52872713
复制相似问题