Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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数组concat中获取1个元素,然后循环到一个数组中_Javascript_Arrays_Loops - Fatal编程技术网

从每个javascript数组concat中获取1个元素,然后循环到一个数组中

从每个javascript数组concat中获取1个元素,然后循环到一个数组中,javascript,arrays,loops,Javascript,Arrays,Loops,我有4个数组,我想把它们合并成1个。我可以这样做,但我想从每个数组中提取一个元素,将其推送到我的新数组中,然后得到下一个4,依此类推。这就是我得到的: var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ]; var b = [ 1, 2, 3, 4, 5, 6]; var c=["a","b","c","d","e","f"]; var d=[7,8,9,10,11,12] var neat=[]; neat= a.concat(b, c,d)

我有4个数组,我想把它们合并成1个。我可以这样做,但我想从每个数组中提取一个元素,将其推送到我的新数组中,然后得到下一个4,依此类推。这就是我得到的:

var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ];
var b = [ 1, 2, 3, 4, 5, 6];
var c=["a","b","c","d","e","f"];
var d=[7,8,9,10,11,12]
var neat=[];
neat= a.concat(b, c,d);
//neat=["foo","bar","baz","bam","bun","fun",1,2,3,4,5,6,"a","b","c","d","e","f",7,8,9,10,11, 12]
我想要的结果是这样的:

//neat=["foo",1,"a",7,"bar",2,"b",8...]

假设每个源数组的长度相同,我不确定循环是否有效,或者是否需要使用另一个函数:

a.forEach((e, i) => {
  neat.push(e, b[i], c[i], d[i]);
};

请尝试以下代码:
var a=[“foo”、“bar”、“baz”、“bam”、“bun”、“fun”];
VarB=[1,2,3,4,5,6];
变量c=[“a”、“b”、“c”、“d”、“e”、“f”];
变量d=[7,8,9,10,11,12]
var=[];
//净=a.concat(b,c,d);
//整洁=[“foo”,“bar”,“baz”,“b
对于(变量i=0;ilog(整洁);
虽然Justins的回答是正确的,但是如果数组的长度不是每次都相同,您可以这样做

var maxItems = Math.max(a.length,b.length,c.length,d.length);

var neat = [];

for(var i = 0; i < maxItems; i++){

  if(a[i] != undefined){
    neat.push(a[i]);
  }

  if(b[i] != undefined){
    neat.push(b[i]);
  }

  if(c[i] != undefined){
    neat.push(c[i]);
  }

  if(d[i] != undefined){
    neat.push(d[i]);
  }
}
var maxItems=Math.max(a.length,b.length,c.length,d.length);
var=[];
对于(变量i=0;i
Math.max
将在4个数组之间找到最大数量的条目,然后对该数字执行一个简单的
for循环
,并检查该值是否
未定义
,然后将其推到
整洁数组


请参阅,因为所有数组的长度都是相等的。所以我们可以使用循环轻松地做到这一点

var a = [ "foo", "bar", "baz", "bam", "bun", "fun" ];
var b = [ 1, 2, 3, 4, 5, 6];
var c=["a","b","c","d","e","f"];
var d=[7,8,9,10,11,12]
var neat=[], i;

for(i=0;i<a.length;i++){
    neat.push(a[i]);
    neat.push(b[i]);
    neat.push(c[i]);
    neat.push(d[i]);
}
console.log(neat);
var a=[“foo”、“bar”、“baz”、“bam”、“bun”、“fun”];
VarB=[1,2,3,4,5,6];
变量c=[“a”、“b”、“c”、“d”、“e”、“f”];
变量d=[7,8,9,10,11,12]
var-neat=[],i;

对于(i=0;对于我的案例,它们的长度是相同的。你知道你可以只使用一个
。推送
?查看下面与你的答案相同的其他答案,并显示此功能。确实,你的答案与这里的其他答案相同。是否总是4个数组?长度是否总是相同?这些是n需要回答的问题类型在找到解决方案之前需要得到回答。您应该实际使用
a.length>=i
,因为
a[i]!=undefined
对于
null
undefined
索引都将返回
false
。此外,在循环条件中从
maxItems
递减
1
是不必要的,并且将忽略最大数组的最后一项。@Taurus嗯,你不希望
null
undefined
的值大部分为l假设数据集是
整数
字符串
。数组中的索引以
0
开始,需要去掉1,否则您将对索引值以外的值进行最后一次迭代。也称为
未定义的
值,如
数学。max
将返回数组中的项数。假设有6项,
maxItems=6
,数组中的最大索引是5,所以最后一次迭代是多余的。是的,但你说的是
i
,所以,你实际上是说
i<5
,所以索引
5
不会被迭代。你说得对,我刚刚注意到我所做的,新手犯了错误。抱歉,谢谢你的提示g out:)你认为你的解决方案比贾斯汀的好吗?就时间复杂度而言,它们都以O(n)运行。@Taurus“更好”是非常主观的。
for
loop通常最快,在所有浏览器中都能工作(Internet Explorer不支持箭头功能)@Slai让我们用“更高效”替换“更好”“。但是,在我看来,使用内置函数(而不是
for
循环)更为简洁。