如何在js中生成以下组合

时间:2018-06-08 09:04:42

标签: javascript arrays

我看到了类似的问题,但我的案例情况不同

我有一个这种结构的数组:

var options = {
  'color': ['red', 'green'],
  'size': ['L', 'XS'],
  'dimensions': ['dim1']
};

我想在以下结构中生成组合

 {
 'red,L,dim1': [
  {'color': 'red'},
  {'size': 'L'},
  {'dimensions': 'dim1'},
 ],
 'red,XS,dim1': [
  {'color': 'red'},
  {'size': 'XS'},
  {'dimensions': 'dim1'},
 ],
 'green,L,dim1': [
  {'color': 'green'},
  {'size': 'L'},
  {'dimensions': 'dim1'},
 ],
 'green,XS,dim1': [
  {'color': 'green'},
  {'size': 'XS'},
  {'dimensions': 'dim1'},
 ],
};

我怎样才能做到这一点? 我不是开发人员 我感谢任何帮助

1 个答案:

答案 0 :(得分:2)

好的,所以在花了一些时间我想出来了

options = ['color', 'size'];
optionsValues= [['Red','Blue'], ['L', 'XS']];

function combination() {
    var r = [], arg = arguments[0], max = arg.length-1;
    function helper(arr, i) {
        for (var j=0, l=arg[i].length; j<l; j++) {
            var a = arr.slice(0); // clone arr
            var obj = {};
            obj[options[i]] = arg[i][j];
            a.push(obj); 
            if (i==max){
                str = '';
                for(var c = a.length - 1 ; c >= 0; c--){
                  if(c == 0){
                    str += a[c][options[c]];
                  }else{
                    str += a[c][options[c]] + ',';
                  }
                }
                r[str] = a;
            }
            else
                helper(a, i+1);
        }
    }
    helper([], 0);
    return r;
}

console.log(combination(optionsValues));