Javascript-如何将所有组合组合组合成一个对象数组

Javascript-如何将所有组合组合组合成一个对象数组,javascript,arrays,Javascript,Arrays,我有以下数组: [{ name: 'foo', values: '10,12' }, { name: 'bar', values: 'red,blue' }] [{ option1: 10, option2: 'red' }, { option1: 10, option2: 'blue' }, { option1: 12, option2: 'red' }, { option1: 12, option2: 'blue' }] 使用一些javas

我有以下数组:

[{
  name: 'foo',
  values: '10,12'
},
{
  name: 'bar',
  values: 'red,blue'
}]
[{
  option1: 10,
  option2: 'red'
},
{
  option1: 10,
  option2: 'blue'
},
{
  option1: 12,
  option2: 'red'
},
{
  option1: 12,
  option2: 'blue'
}]
使用一些javascript逻辑,我想输出以下数组:

[{
  name: 'foo',
  values: '10,12'
},
{
  name: 'bar',
  values: 'red,blue'
}]
[{
  option1: 10,
  option2: 'red'
},
{
  option1: 10,
  option2: 'blue'
},
{
  option1: 12,
  option2: 'red'
},
{
  option1: 12,
  option2: 'blue'
}]

使用javascript实现这一点的最佳正确方法是什么?

假设您的第一个数组名为arr

var-arr=[{
名称:“foo”,
值:“10,12”
},
{
名称:'酒吧',
值:“红色,蓝色”
}];    
var v1=arr[0]。value.split(',');
var v2=arr[1]。value.split(',');
var res=新数组();
用于(v1中的i){
对于(v2中的j){
res.push({'option1':v1[i],'option2':v2[j]});
}
}

控制台日志(res)以下是一种可以处理任意数量对象的方法

功能值CrossProduct(输入){
返回input.flatMap((当前、索引、数组)=>{
让结果=[];
让values=current.values.split(',');
for(设v为值){
for(设i=0;i如果(i对胜利有用

注意:实际上,这只适用于包含两个对象的数组,每个对象中有任意数量的值,其中第一组值是数字,第二组值是字符串,这就是您上面描述的

const arr=[{
名称:“foo”,
值:“10,12”
},
{
名称:'酒吧',
值:“红色,蓝色”
}];
常量值=arr
.map(o=>o.values.split(','))
.减少((当前,下一个)=>{
返回当前映射(c=>{
返回next.map(n=>{
返回{
选项1:parseInt(c),
选择2:n
};
});
}).flat();
});

console.log(values);
如果您需要通用方法从各种值中获取可能的选项

const options=data=>{
设集合=[[]];
data.forEach(({values},i)=>{
const new_set=[];
values.split(“,”).forEach(值=>{
新推(
from(set,set=>[…set,[`option${i+1}`,value]]
);
});
集合=新集合.flatMap(集合=>set);
});
返回sets.map(set=>Object.fromEntries(set));
};
常数数据=[
{
姓名:"富",,
价值观:“10,12”
},
{
名称:“酒吧”,
值:“红、蓝、绿”
},
{
名称:“测试”,
值:“顶部,底部”
}
];

控制台日志(选项(数据))
您的主数组中有多少个项目?对
值中的项目数量是否有任何限制?可能最多有10个值。即值:10、12、14、16、17、19、20等etcI刚刚注意到您的结果数组作为选项1作为一个数字,即使它在原始数组中是一个字符串。这是有意的吗有两个对象,第一个是数字,第二个是字符串?有可能用3个选项来实现吗?即(红色、蓝色、绿色)?如果我们决定不使用绿色,输出将是{option1:,'red',option2:'blue',option3:null}不清楚您要的是什么。是“red、blue、green”吗是单个输入对象的
属性吗?如果是,定义如何在结果中填充
选项
项的规则是什么?如果我想在混合中添加第三个数组来填充选项3,我如何更改上述内容?这取决于预期的结果。您是否在寻找所有可能的选项组合每个数组中是否有y项?