在json中组合两个数组 [英] make combinations of two array in json

查看:93
本文介绍了在json中组合两个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入:

"options": [
  {
    "name": "Color",
    "values": [
      "Blue",
      "Black"
    ]
  },
  {
    "name": "Size",
    "values": [
      "Small",
      "Large"
    ]
  }
]

Output: "variants": [
  {
    "option1": "Blue",
    "option2": "Small"
  },
  {
    "option1": "Blue",
    "option2": "Large"
  },
  {
    "option1": "Black",
    "option2": "Small"
  },
  {
    "option1": "Black",
    "option2": "Large"
  }
]

如何使用递归来解决这个问题?options数组可以包含多个名称,我需要显示上面的内容。是否可以使用笛卡尔积来完成

How to solve this using recursion ?The options array can contain multiple name and i need the above out to be displayed. Can it be done using cartesian product i guess

推荐答案

您可以采用迭代和递归方法来获取所有选项组合。

You could take an iterative and recursive approach for getting all option combinations.

function getCombinations(array) {

    function iter(i, temp) {
        if (i === array.length) {
            result.push(temp.reduce(function (o, v, i) {
                o['option' + (i + 1)] = v;
                return o;
            }, {}));
            return;
        }
        array[i].values.forEach(function (a) {
            iter(i + 1, temp.concat(a));
        });
    }

    var result = [];
    iter(0, []);
    return result;
}

var options = [{ name: "Color", values: ["Blue", "Black"] }, { name: "Size", values: ["155", "159"] }, { name: 'Material', values: ['Sand', 'Clay', 'Mud'] }],
    variants = getCombinations(options);

console.log(variants);

.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

function getCombinations(array) {

    function iter(i, temp) {
        if (i === array.length) {
            result.push(temp);
            return;
        }
        array[i].values.forEach(a => iter(i + 1, Object.assign({}, temp, { ['option' + (i + 1)]: a })));
    }

    var result = [];
    iter(0, {});
    return result;
}

var options = [{ name: "Color", values: ["Blue", "Black"] }, { name: "Size", values: ["155", "159"] }, { name: 'Material', values: ['Sand', 'Clay', 'Mud'] }],
    variants = getCombinations(options);

console.log(variants);

.as-console-wrapper { max-height: 100% !important; top: 0; }

这篇关于在json中组合两个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆