首页 > 解决方案 > 如何从 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",
}

标签: javascriptjson

解决方案


您可以通过移交键数组并使用其余键和收集的键数组再次调用该函数来采用递归方法。

对于每一轮,将组合键存储在对象中,并检查数组的长度,如果没有更多可用项则退出。

否则,使用没有实际键的数组再次调用该函数。

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


推荐阅读