如何从json数组生成键/值的每个组合?

时间:2017-12-22 01:53:50

标签: javascript arrays json

我有一个随机的json数组键值,其值是这样的数组:

json = {foo:[1,2],bar:[3,4],pi:[5]}

如何为任意数量的键生成这些参数的每个组合,以便返回如下列表:

{foo:1,bar,3,pi:5}
{foo:1,bar:4,pi:5}
{foo:2,bar:3,pi:5}
{foo:2,bar:4,pi:5}

1 个答案:

答案 0 :(得分:7)

使用reduce和每次迭代,生成新的排列:

const json = {foo:[1,2],bar:[3,4],pi:[5, 7], test: [1]};

const results = Object.keys(json).reduce((acc, key) => {
  const newArray = [];
  
  json[key].forEach(item => {
    if (!acc || !acc.length) { // First iteration
      newArray.push({[key]: item});
    } else {
      acc.forEach(obj => {
        newArray.push({...obj, [key]: item});
      });
    }
  });
  
  return newArray;
}, []);

console.log(results);