Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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/13.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/2/ruby-on-rails/55.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个这样的数组 a = [1,1,1]; b = [2,2,2]; c = [3,3,3]; d = Merge(a,b,c); 我想将所有这些数组合并到一个数组中,以便结果如下 d = [1,2,3,1,2,3,1,2,3]; 我创建了一个函数,可以执行以下操作: function Merge() { var result = []; var maxLength = 0; for(key in arguments) if(arguments[k

我有3个这样的数组

a = [1,1,1];
b = [2,2,2];
c = [3,3,3];
d = Merge(a,b,c);
我想将所有这些数组合并到一个数组中,以便结果如下

d = [1,2,3,1,2,3,1,2,3];
我创建了一个函数,可以执行以下操作:

function Merge()
{
    var result = [];
    var maxLength = 0;
    for(key in arguments)
        if(arguments[key].length>maxLength)
            maxLength = arguments[key].length;
    while(maxLength--)
        for(key in arguments)
            if(x=arguments[key].shift())
                result.push(x);
    return result;
}
问题是当我像这样调用函数
Merge

a = [1,1,1];
b = [2,2,2];
c = [3,3,3];
d = Merge(a,b,c);
它将正确的数组返回给
d
变量,但当我尝试打印
a、b、c
中的内容时,我发现它们都是空数组,因为我使用了
shift()

然后我通过将
参数的值复制到另一个数组并使用该数组来纠正这个错误

function Merge()
{
    var result = [];
    var maxLength = 0;
    var arg = JSON.parse(JSON.stringify(arguments));
    for(key in arg)
        if(arg[key].length>maxLength)
            maxLength = arg[key].length;
    while(maxLength--)
        for(key in arg)
            if(x=arg[key].shift())
                result.push(x);
    return result;
}
第一个问题:我不明白的是为什么我在
参数
数组上移动并更改
a、b、c

第二个问题:有没有一种简单的方法可以做到这一点?

移位的目的是改变移位数组。使用普通索引单步遍历数组:

for (var i=0; i<arg.length; i++) { result.push(arg[i]); }

for(var i=0;i回答您的第一个问题

方法从数组中删除第一个元素 并返回该元素。此方法更改数组的长度。 ()

此函数将合并n个数组而不修改它们

function merge(){
   var result = [],
       lengths = [],
       max_len,
       num_args = arguments.length;

    for( i = 0; i < num_args; i++ ) {
        lengths.push( arguments[ i ].length );
    }
    max_len = Math.max.apply( null, lengths );

    for( i = 0; i < max_len; i++ ){
        for( j = 0; j < num_args; j++ ) {
            if( arguments[ j ][ i ] != null ) {
                result.push( arguments[ j ][ i ] );
            }
        }
    }
    return result;
}
函数合并(){
var结果=[],
长度=[],
马克斯·伦,
num_args=arguments.length;
对于(i=0;i
您应该测试看看
x
的值到底是什么。
x=arguments[key].shift()
因为它显然不是您认为的值。它是数组中移位元素的值,当数组为空时,shift返回unfinedd是否所有合并的数组大小都相同?否,如果
a=[1,1,1];b=[2,2,2];c=[3,3];
结果应该是
d=[1,2,3,1,2,3,1,2,1];
我定义的函数做得很正确,因为我在x上测试它是否未定义,那么问题出在哪里?对我来说不起作用,因为我意识到
args
不是一个真正的数组,它是一个索引为
0,1,2..
的对象,这意味着它没有属性
length
@Khalid你说得对,参数不是本机数组,但它肯定有一个
length
属性。@让我们假设它有一个
length
属性。此解决方案不起作用,它将返回
[[1,1,1],[2,2],[3,3]
,而它应该是
[1,2,3,1,2,1,2,3]
@Khalid同意,我只是简单地指出,
参数
确实有一个
长度
属性。@Waxen,你是对的,在这种情况下,不需要参数,只需要参数,但它不会解决问题此函数返回
[1,1,1,2,2,2,3,3]
,但当我在
result.push中更改
I
j
时,它会返回正确答案(参数[j][I]);
。我认为它不适用于不同大小的数组。哦,我没有仔细阅读您最初的问题,我的错。它没有给出您想要的答案,您的更改肯定不适用于不同大小的数组。@Khalid好的,用一个适用于可变长度输入的有效解决方案更新了此内容。