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"]

  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。