javascript - JS:通过 AND 操作组合的数组字典
问题描述
我使用 Angularjs。我有下一个数据,例如:
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
}]
过滤器数量可以不同
解决方案
如果带有对象的数组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; }
推荐阅读
- mysql - 将数据从 MySQL 写入远程服务器
- java - 为什么我会收到此错误消息,我该如何解决?
- python - Python Unittest如何为两个数字和添加“或”
- c++ - 调用方法存在后的分段错误()
- flutter - 如何在 BottomNavigationBar Flutter 上添加当前页面
- r - 如何用ggplot2在彼此内部绘制圆圈?
- node.js - 如何从strapi部署strapi和nuxt应用程序
- javascript - 将两个回调函数合二为一
- python - 如何在 Pyglet 窗口中嵌入 Matplotlib 图
- matplotlib - Python 3.10 上的“找不到满足 matplotlib==3.4.3 要求的版本”问题