关于JS中把二维数组变为一个数组的几个方法

本文介绍了在JavaScript中如何将一个二维数组转换为一维数组的几种方法,以解决前端实习笔试中遇到的问题。例如,将[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]]转换为[99,1,3.0,2,3.9,3,2.0,4,1.2,5,1.3]。作者提出通过遍历数组并判断元素类型来实现转换的思路。" 105702836,8041694,Windows环境下编译静态Qt5.9.2详细步骤,"['Qt开发', 'C++', '编译工具', 'Windows开发', '静态链接']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    刚接触前端不久,前几天斗胆参加了某公司的前端实习笔试,其中有一道题,大概意思就是输入一个二维数组,返回一个拍平后的以为数组。比如输入的是[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]],输出的就会是[99,1,3.0,2,3.9,3,2.0,4,1.2,5,1.3].

    我刚看到这道题目,第一反应就是遍历这个数组,然后判断每一个元素的类型是不是object,如果是就遍历这个object取出里面的数值。程序大概是这样吧:

 var arr=[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]]
 function flatten1(arr){//遍历数组的方式把二维数组转为一维数组
	var newarr=[];
	for(var i=0;i<arr.length;i++)
	{
	   if(typeof(arr2=arr[i])=="object")
	   {
	   	for(var j=0;j<arr2.length;j++)
	   	{
	   		newarr.push(arr2[j]);
	   		
	   		}
	   	}	
	   else 
            {
	   		newarr.push(arr[i]);
	    }
	}
	return newarr;
	}
	document.write(flatten1(arr));
    虽然是这么想,但是我没有这么写,我想了一下,能不能先转化为字符串,然后利用正则表达式去掉不想要的中括号呢?于是我在试题上大概是这么写 的:

     var arr=[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]]
     function flatten2(arr){//利用正则表达式的方式把二维数组转为一维数组
     var str=arr.join(",");
     str=str.replace(/\[|\]/g,"");//因为我觉得天真以为str=arr.join(",")之后,字符串是这样子的:"99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]"
     var newarr=str.split(",");
     return newarr;  
     }
   	document.write(flatten2(arr));
    后来我考完试我测试了一下,我看了一下join的用法,简直是too young too simple,原来根本不需要这样复杂,书里面对join的描述是:“使用join方法将数组转换成字符串时,会将数组中的每个元素都转成字符串,然后再用separator连接符将转换成字符串的元素连接成一个字符串“。也就是说当遇到数组中的元素也是一个数组时,会先把这个数组中的数组先转化为字符串。所以根本不用什么正则表达式啊,只需要这样:

 var arr=[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]]
     function flatten3(arr){//利用join()二维数组转为一维数组
     var str=arr.join(",");
     var newarr=str.split(",");
     return newarr;  
     }
   document.write(flatten3(arr));
    对的!这样就行了。然后我想了一下,那用concat方法行不行呢?然后我又看了一下concat方法的描述:”假设在调用concat()方法时,传递的参数为数组[1,2,3],那么concat方法会在数组后面添加3个元素,这3个值分别是1,2,3,而不是把整个数组添加到数组后面,即不是为数组增加一个元素“。这个性质也可以用在这道题里面。(但是要注意的是,如果参数的数据类型为数组,并且数组中的元素仍是数组,那么concat方法会将作为参数的数组中的所有元素依次添加到数组后面,而数组中的数组则不再分拆成单个元素添加了!)于是也可以这样来转化:

 var arr=[99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]]	
    function flatten4(){//利用concat()特性把二维数组转为一维数组
    var newarr=[];
    for(var i=0;i<arr.length;i++)
    {
     newarr=newarr.concat(arr[i]);
    }
     return newarr
    }
   document.write(flatten4(arr)); 
    噢,对了,我在想去掉 [ 或者 ] 符号的正则表达式str=str.replace(/\[|\]/g,"")在我故意设定字符串”99,[1,3.0],[2,3.9],[3,2.0],[4,1.2],[5,1.3]“来测试的时候发现会报错。要改成这样才行:str=str.replace(/[\[]|\]/g,""),我也不知道为什么,懂的大神告诉我一下吧,毕竟我才是个刚学前端一个月的菜鸟T T..  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值