如何从JSON对象的键生成所有组合?

时间:2019-04-03 09:39:07

标签: javascript json

我需要生成对象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",
}

1 个答案:

答案 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));