js 类数组转数组

来自某道面试题,题忘了,难点在于:function 中的argument类数组怎么转数组

我们来看看argument是什么

function myToArray(){
			console.log(arguments);
			console.log(arguments === Array)
		}
		myToArray(3,5,7);

Chrome下控制台

我们来看arguments并不是数组,事实上typeof(arguments)输出是一个Object

怎么这么熟悉???

我们来看JQuery下$()下返回什么

<html>
	<body>
		<div></div>
		<div></div>
		<div></div>
	</body>
	<script type="text/javascript" src="jquery-1.11.2.js"></script>
	<script>
		console.log($("div"))
	</script>
</html>

 Chrome下结果

typeof($("div"))输出是一个Object

我们可以看到,这并不是一个数组,而是一个对象

我们来怎么运用它的

var a = {0:"aaaa",1:"bbbb",2:"cccc",length:3}
for(var i=0;i<a.length;i++){
  console.log(a[i])
}//输出 aaaa bbbb cccc

这就是类数组

所以类数组我们可以这么转

function sArray(){
	var temp_array = [];
	for(var i=0;i<arguments.length;i++){
		temp_array.push(arguments[i])
	}
	return temp_array;
}
console.log(sArray("1a","2b","3c","4d"))//["1a", "2b", "3c", "4d"]

除此之外,还有一种方法,我们来看jQuery里怎么转的

toArray: function() {
	return core_slice.call( this );
},

这里似乎用了个slice,还有call?

是的

首先我们知道slice是array实例的方法,

var a=[1,3,5,7];
console.log(a.slice())                //[1, 3, 5, 7]
console.log(Array.slice())             //Uncaught TypeError: Array.slice is not a function
console.log(Array.prototype.slice.call(a));   //[1, 3, 5, 7]var a2 = {0:"aaaa",1:"bbbb",2:"cccc",length:3};console.log(Array.prototype.slice.call(a2));    //["aaaa", "bbbb", "cccc"]

slice方法有两个参数 strar ,end不传参的时候可以传出整个数组

call方法可以改变this指向,call(a),slice方法里的this就指向了a

因此另一种转数组的方法就是

function myToArray(){
	return Array.prototype.slice.call(arguments)
}
console.log(myToArray(1,3,5,7))          //[1, 3, 5, 7]
console.log(myToArray("a","b","c","d"))  //["a", "b", "c", "d"]

  

时间: 2024-10-07 15:55:28

js 类数组转数组的相关文章

js类数组转数组的方法(ArrayLike)

1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数

js类数组

类数组 - [ Array-like ] : objects 1. what's Array-like 类数组和数组很像,但是数组的很多方法却不能用,这就很尴尬了~ 像 arguments.nodelist 等这些数据有序集合,有长度和下标等属性,但却不是 Array. 这就是所谓的 Array-like(类数组/伪数组).对于 Array-like 我们可以用跨原型链来操作,eg :Array.prototype.slice.call(arguments, 0); 这也是把 Array-lik

js构造函数,索引数组和属性的属性

本文主要介绍和小结js的构造函数,关联数组的实现方式和使用,及不可变对象和它的实现方式及他们使用过程中要注意的点 <script> function p(){ var len=arguments.length; for(var i=0;i<len;i++){ document.write(arguments[i]+"<br/>"); } } function Myclass(x,y){ this.x=x; this.y=y; this.show=funct

JS的二维数组

今天,记录一下JS的二位数组,并附上例题. 一.二维数组的本质:数组中的元素又是数组. 其实,我们都见过这样的二维数组,只不过没在意罢了,例如: var arr = [[1,2,4,6],[2,4,7,8],[8,9,10,11],[9,12,13,15]] //这就是一个二位数组arr[2][3]; // 11 注意:表示第三列第4行所在的元素.角标从0开始 二.下面介绍二维数组的初始化 记住了二维数组的本质,初始化也难不倒我们了.看一下实例 实例一: var arr = [[1,2],[a,

实验11:Problem D: 分数类的模板数组类

在默认构造函数里面,分母的默认值不能为0!! Home Web Board ProblemSet Standing Status Statistics Problem D: 分数类的模板数组类 Problem D: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 509  Solved: 350[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函

关于String类和String[]数组的获取长度方法细节

一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";                       //第一行 String sex = new String("男");          //第二行 String age = 18+"";                       //第三行 int len = name.le

js连接多个数组并删除重复的元素

js连接多个数组并删除重复的元素:在实际应用中,可能需要将多个数组合并到一个数组中去,并且删除数组中重复的元素.代码实例如下: var a=["antzone","蚂蚁部落","市南区"], b=["新锐科技","蚂蚁部落","努力奋斗"], c=[2,"新锐科技","js教程"], _a=a.concat(b).concat(c), _hash=

js 如何动态添加数组_百度知道

1.数组的创建var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外

hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8984    Accepted Submission(s): 4594 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球

js之二维数组定义和初始化三种方法

方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]] 方法二:未知长度的二维数组 var tArray = new Array();   //先声明一维 for(var k=0;k<i;k++){        //一维长度为i,i为变量,可以根据实际情况改变