【问题标题】:How to create every possible variation from multiple multi dimensional arrays?如何从多个多维数组中创建所有可能的变化?
【发布时间】:2019-02-03 04:14:49
【问题描述】:

我尝试了各种方法,基本上,如果我有一组红色和绿色选项,以及另一组尺寸,比如小号和大号,我需要满足以下条件:

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

【问题讨论】:

  • 到目前为止您使用的实际代码是什么,以便我们可以看到您的问题在哪里?
  • 我的代码没用,我什至没有接近解决方案! @basic 我引用的页面上的解决方案,是我需要的,但是数据结构也很不一样!
  • @Shannon Hochkins 您对第一个数组的预期输出是什么input
  • 为什么需要“逆向工程”链接问题答案的代码?
  • 那么等一下@ShannonHochkins 为什么你不能通过内容嵌套循环?如果你只是想用一种方式,x 中的每个 var 都输出 y,为什么你不能只有一个嵌套循环?

标签: javascript arrays variations


【解决方案1】:

我只是想找出一个算法来解决这个问题。它有点难以解释。它只是一种组合算法。
1.它需要一个项目,然后将它与所有其他剩余的项目结合起来。
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))

【讨论】:

  • 当有第三组选项时这不起作用!
  • @Shannon Hochkins 三个选项的预期输出是什么
  • 它应该是动态的,如果每组有4个选项或20个选项,无论每个变体中有多少选项,它都应该不断添加变体
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 2021-10-26
相关资源
最近更新 更多