javascript - 如何从 JSON 对象的键生成所有组合?
问题描述
我需要使用键和值生成包含其他对象 A 的所有组合的对象 B:
{
"x": "data-x",
"y": "data-y",
"z": "data-z"
}
我需要这样的结果:
{
"x": "data-x",
"y": "data-y",
"z": "data-z",
"x+y": "data-xy",
"x+z": "data-xz",
"y+z": "data-yz",
"x+y+z": "data-xyz",
}
解决方案
您可以通过移交键数组并使用其余键和收集的键数组再次调用该函数来采用递归方法。
对于每一轮,将组合键存储在对象中,并检查数组的长度,如果没有更多可用项则退出。
否则,使用没有实际键的数组再次调用该函数。
function getAll(object) {
function iter([value, ...array], left) {
var right = left.concat(value);
result[right.join('+')] = 'data-' + right.map(key => object[key]).join('+');
if (!array.length) return;
iter(array, left);
iter(array, right);
}
var result = {};
iter(Object.keys(object), []);
return result;
}
var data = { x: "X", y: "Y", z: "Z" };
console.log(getAll(data));
推荐阅读
- javascript - 如何使用 react-select-plus 获取突出显示项的值?
- jquery - jQuery .change 函数没有从选择中捕获第二个更改
- python - 我的脚本无法解析复杂网页中的项目
- ios - 如何在模态视图控制器之间转换并删除隐藏的?
- visual-studio-code - VSCode 扩展安装依赖激活顺序
- angularjs - 使用来自 firestore 的数据更新 angularjs ng-repeat
- user-interface - 移动工具提示的底部提示
- yocto - 如何了解发行版功能
- html - 使用 url() 作为内容值时无法调整图像大小
- html - 保持具有定义宽度/高度的图像响应