我需要生成对象B,该对象包含其键和值所包含的待处理对象A的所有组合:
{
"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",
}
答案 0 :(得分:1)
您可以采用递归方法,交出一组键,然后使用其余键和一组已收集键再次调用该函数。
对于每个回合,将组合键存储在对象中,并检查数组的长度,如果没有更多可用项,则退出。
否则,请使用没有实际键的数组再次调用该函数。
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));