我有3个像这样的数组
a = [1,1,1];
b = [2,2,2];
c = [3,3,3];
我想在一个数组中合并所有这些数组,以便结果应该是这个
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
时
d = Merge(a,b,c);
它将正确的数组返回到d
变量,但是当我尝试打印a,b,c
中的内容时,我发现所有这些都是空数组,因为我使用了shift()
。
然后我通过将arguments
的值复制到另一个数组并使用该数组来纠正此错误
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;
}
第一个问题:我无法理解的是为什么我转移arguments
数组并更改a,b,c
。
第二个问题:有一种简单的方法吗?
答案 0 :(得分:0)
改变移位数组的移位的目的。使用普通索引逐步执行数组:
for (var i=0; i<arg.length; i++) { result.push(arg[i]); }
答案 1 :(得分:0)
回答你的第一个问题
Array.prototype.shift()方法从数组中删除第一个元素 并返回该元素。此方法更改数组的长度。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift)
此函数将合并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;
}