Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 列表的笛卡尔积_Javascript_Dictionary_Arraylist_Cartesian Product - Fatal编程技术网

Javascript 列表的笛卡尔积

Javascript 列表的笛卡尔积,javascript,dictionary,arraylist,cartesian-product,Javascript,Dictionary,Arraylist,Cartesian Product,我需要两个javascript列表的笛卡尔乘积 例如: 让l1=['a','e','f']; 设l2=['1','3','2']; 设lp=prod(l1,l2); lp将是 [ ['a','1'], ['e','1'], ['f','1'], ['a','3'], ['e','3'], ['f','3'], ['a','2'], ['e','2'], ['f','2'] ] 我可以很容易地使用for/foreach循环,但我想知道是否有人会对map函数提出一些优雅的建议 让l1=['a'

我需要两个javascript列表的笛卡尔乘积

例如:

让l1=['a','e','f'];
设l2=['1','3','2'];
设lp=prod(l1,l2);
lp将是

[
['a','1'],
['e','1'],
['f','1'],
['a','3'],
['e','3'],
['f','3'],
['a','2'],
['e','2'],
['f','2']
]
我可以很容易地使用for/foreach循环,但我想知道是否有人会对map函数提出一些优雅的建议

让l1=['a','e','f'];
设l2=['1','3','2'];
console.log(l1.map)(a=>{
返回l2.map(b=>{
返回[a,b];
})
}).flat())
尝试以下操作

让l1=['a','e','f'];
设l2=['1','3','2'];
console.log(l1.map)(a=>{
返回l2.map(b=>{
返回[a,b];
})

}).flat())
您可以使用reduce和map的组合:

console.log(l1.reduce((result, el1) => {
  result.push(...l2.map((el2) => [el1, el2]));
  return result;
}, []));

您可以结合使用reduce和map:

console.log(l1.reduce((result, el1) => {
  result.push(...l2.map((el2) => [el1, el2]));
  return result;
}, []));
这应该起作用:

功能产品(l1、l2){
返回l2.reduce(
(p,b)=>p.concat(l1.map(a=>a,b)),
[],
);
}
常数l1=['a','e','f'];
常数l2=['1','3','2'];
常数lp=产品(l1,l2);
控制台日志(lp)这应该可以:

功能产品(l1、l2){
返回l2.reduce(
(p,b)=>p.concat(l1.map(a=>a,b)),
[],
);
}
常数l1=['a','e','f'];
常数l2=['1','3','2'];
常数lp=产品(l1,l2);

控制台日志(lp)通过减少阵列并构建新阵列,您可以采取一种适用于两个以上阵列的方法

让l1=['a','e','f'],
l2=['1','3','2',],
结果=[l1,l2]
.reduce((a,b)=>a.reduce((r,v)=>r.concat(b.map(w=>[]),concat(v,w)),[]);
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以采取一种方法,通过减少阵列并构建新阵列,使其适用于两个以上的阵列

让l1=['a','e','f'],
l2=['1','3','2',],
结果=[l1,l2]
.reduce((a,b)=>a.reduce((r,v)=>r.concat(b.map(w=>[]),concat(v,w)),[]);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
看起来正确而优雅,但我得到一个“flat不是函数”错误。flat()使用安全吗?根据MDN,Edge和Internet explorer中没有flat
。好吧,即使这些不是我最喜欢的浏览器,我也会避免使用它。但是谢谢你的回答,它真的很优雅。看起来正确而优雅,但是我得到了一个“平坦不是函数”的错误。flat()使用安全吗?根据MDN,Edge和Internet explorer中没有flat
。好吧,即使这些不是我最喜欢的浏览器,我也会避免使用它。但是谢谢你的回答,它真的很优雅。