Javascript 将多个数组合并到一个数组中
我有3个这样的数组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
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好的,用一个适用于可变长度输入的有效解决方案更新了此内容。