如何创建多个多维数组每个可能的变化?

问题描述 投票:-1回答:1

我已经试过各种方法,基本上,如果我有一个红色和绿色的选项为一组,而另一组尺寸,说小及大,我需要以下是真实的:

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

javascript arrays variations
1个回答
0
投票

我只是想弄清楚的this.Its有点难以解释的算法。它只是一个组合算法。 1.It需要一个单一的项目,然后与所有其他剩余的结合起来。 2.i代表index of inputj代表index of options of current obj。这些值不改变,直到ab到达终点。

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))
© www.soinside.com 2019 - 2024. All rights reserved.