Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

如何在JavaScript中合并更多数组

如何在JavaScript中合并更多数组,javascript,arrays,Javascript,Arrays,我有3个或更多阵列: var array1 = [a,b,c]; var array2 = [c,d]; var array3 = [e,f]; 要获得1个合并数组,其结果如下: result = [ace, acf, ade, adf, bce, bdf, bde, bdf, cce, ccf, cde, cdf] 我怎么做?请注意:数组输入将不受限制。您可以使用迭代和递归方法以及组合算法 函数组合(数组){ 功能c(部分,索引){ 数组[index].forEach(函数(a){

我有3个或更多阵列:

 var array1 = [a,b,c];
 var array2 = [c,d];
 var array3 = [e,f];
要获得1个合并数组,其结果如下:

result = [ace, acf, ade, adf, bce, bdf, bde, bdf, cce, ccf, cde, cdf]

我怎么做?请注意:数组输入将不受限制。

您可以使用迭代和递归方法以及组合算法

函数组合(数组){
功能c(部分,索引){
数组[index].forEach(函数(a){
var p=部分混凝土([a]);
if(p.length==array.length){
r、 推(p.join(“”));
返回;
}
c(p,指数+1);
});
}
var r=[];
c([],0);
返回r;
}
log(组合(['a','b','c'],['c','d'],['e','f']]);
log(组合(['a','b','c'],['d','e'],['f','g'],['h','i','j'])

.as控制台包装{max height:100%!重要;top:0;}
尝试使用for循环

vararray1=[“a”、“b”、“c”];
var array2=[“c”,“d”];
var array3=[“e”,“f”];
var result=[],pushresult=0;
对于(变量i=0;i
如果数组数是固定的(不是数组元素),则可以使用
var array1=[“a”、“b”、“c”];
var array2=[“c”,“d”];
var array3=[“e”,“f”];
var d=[];
对于(阵列1中的i){
对于(阵列2中的j){
对于(阵列3中的k){
d、 推送(array1[i]+array2[j]+array3[k]);
}
}
}
警戒(d);

似乎您正试图从多个数组(集合)中获取笛卡尔积。
考虑使用
Array.concat
Array.reduce
Array.map
函数使用以下ES6解决方案:

const flatte=(arr)=>[].concat.apply([],arr);
常数乘积=(…集合)=>
集合。减少((acc,集合)=>
展平(acc.map(x=>set.map(y=>[…x,y])),
[[]]);
var array1=['a','b','c'],
array2=['c','d'],
数组3=['e','f'];
结果=产品(阵列1、阵列2、阵列3);

log(JSON.stringify(result))列表应用程序和monad可以轻松实现这一点

//数组应用程序
Array.prototype.ap=函数(…args)
{
常量循环=(acc,[x,…xs])=>
x==未定义
?[本[0](…acc)]
:x.chain(a=>
环路(根据concat([a]),xs))
返回循环([],args)
}
//数组单子
Array.prototype.chain=功能链(f)
{
返回此值。减少((acc,x)=>
acc.concat(f(x)),[])
}
//艰苦的工作已经完成了
常量组合=(…xxs)=>
[(…xs)=>xs].ap(…xxs)
console.log(组合(array1、array2、array3))
//[a1',a2',a3'],
//[‘a1’、‘a2’、‘b3’],
//[‘a1’、‘a2’、‘c3’],
//[‘a1’、‘b2’、‘a3’],
//[‘a1’、‘b2’、‘b3’],
//[‘a1’、‘b2’、‘c3’],
//[‘b1’、‘a2’、‘a3’],
//[‘b1’、‘a2’、‘b3’],
//[‘b1’、‘a2’、‘c3’],
//[‘b1’、‘b2’、‘a3’],
//[‘b1’、‘b2’、‘b3’],
//[‘b1’、‘b2’、‘c3’],
//[‘c1’、‘a2’、‘a3’],
//[‘c1’、‘a2’、‘b3’],
//[‘c1’、‘a2’、‘c3’],
//[‘c1’、‘b2’、‘a3’],
//[‘c1’、‘b2’、‘b3’],
//[‘c1’、‘b2’、‘c3’],
//[‘d1’、‘a2’、‘a3’],
//[‘d1’、‘a2’、‘b3’],
//[‘d1’、‘a2’、‘c3’],
//[‘d1’、‘b2’、‘a3’],
//[‘d1’、‘b2’、‘b3’],

//['d1','b2','c3']
似乎需要一个
数组.prototype.cartesian()
来处理不确定数量的数组。它可以做如下工作

Array.prototype.cartesian=函数(…a){
返回a.length?this.reduce((p,c)=>(p.push(…a[0]。笛卡尔(…a.slice(1)).map(e=>a.length>1?[c,…e]:[c,e])),p),[])
:这个;
};
var arr1=[“a”、“b”、“c”],
arr2=[“c”,“d”],
arr3=[“e”,“f”],
结果=arr1笛卡尔(arr2,arr3);

log(JSON.stringify(result))你似乎在寻找所有的组合,而不是一个“合并”。我同意,这不是你在寻找的
.concat()
。既然你可以让你的代码成为一个可运行的代码片段,为什么还要在别处发布呢?是的。但是,我不知道怎么做(@priya_singh供您参考谢谢您的帮助。但是如果我有4、5或100个这样的数组,我必须使用100时间循环?:(.Thank.Thank:)
for..in
更适合在ObjectsSup上循环用于识别catesian产品。
if you number of array is fixed (not array element) then you can use

<script>
var array1 = ["a","b","c"];
var array2 = ["c","d"];
var array3 = ["e","f"];
var d=[];
for(i in array1){
    for (j in array2){
        for(k in array3){
        d.push(array1[i]+array2[j]+array3[k]);  
        }
    }
}
alert(d);
</script>