我已经试过各种方法,基本上,如果我有一个红色和绿色的选项为一组,而另一组尺寸,说小及大,我需要以下是真实的:
const input = [{
label : 'Colours',
options: [{text : 'red'}, {text : 'green'}]
},{
label : 'Sizes',
options: [{text : 'small'}, {text: 'large'}]
}];
我希望这样的输出:
red, small,
red, large,
green, small,
green, large
下面是一个比较复杂的,但类似的结构,这也应该能够从同一个代码生成:
[{"label":"Fitting Options","options":[{"text":"No Thanks","value":"no-thanks","price":0},{"text":"Yes Please (+$110.00 )","value":"yes-please","price":"110.00"}]},{"label":"Memory Card Size","options":[{"text":"128GB (+$180.00 )","value":"128gb","price":"180.00"},{"text":"16GB","value":"16gb","price":0},{"text":"32GB (+$30.00 )","value":"32gb","price":"30.00"},{"text":"64GB (+$80.00 )","value":"64gb","price":"80.00"}]}]
我用这个作为参考,但不能完全反向工程了! Get all variants from a multidimensional array in javascript
我只是想弄清楚的this.Its有点难以解释的算法。它只是一个组合算法。
1.It需要一个单一的项目,然后与所有其他剩余的结合起来。
2.i
代表index of input
。 j
代表index of options of current obj
。这些值不改变,直到a
和b
到达终点。
function findComb(arr,result,i,j,a,b){ result.push([arr[i].options[j].text,arr[a].options[b].text]);
if(arr[a].options[b + 1]) b++;
else if(arr[a + 1]) a++;
else{
if(arr[i].options[j + 1]){
j++
a = i + 1
b = 0
}
else if(arr[i + 2]){
i++;
j = 0;
a = i + 1;
b = 0
}
else return result;
}
return findComb(arr,result,i,j,a,b)
}
const input1 = [{
label : 'Colours',
options: [{text : 'red'}, {text : 'green'}]
},{
label : 'Sizes',
options: [{text : 'small'}, {text: 'large'}]
}];
const input2 = [{
label : 'Colours',
options: [{text : 'red'}, {text : 'green'},{text:"blue"}]
},{
label : 'Sizes',
options: [{text : 'small'}, {text: 'large'},{text: 'medium'}]
}];
console.log(findComb(input1,[],0,0,1,0))
console.log(findComb(input2,[],0,0,1,0))