我看到了类似的问题,但我的案例情况不同
我有一个这种结构的数组:
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'},
],
};
我怎样才能做到这一点? 我不是开发人员 我感谢任何帮助
答案 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));