javascript关于数组的几个常用伎俩
2010-8-16
1.把对象变成类数组
var a = { name : "jquery" }, b = ["elem1", "elem2", "elem3"]; Array.prototype.push.apply(a, b); alert(a) //[Object object] //可以像遍历数组一样遍历这个对象 for ( var i = 0; i < a.length; i ++ ) { alert(a[i]) }
jquery就是用这种方法把jquery对象变成类数组的,效率还很高。
2.去掉一层嵌套数组
var a = [[1,2], 3, [4,5,6]]; var b = Array.prototype.concat.apply([], a); console.info(b) //1,2,3,4,5,6
concat方法:
arrayObject.concat(arrayX,arrayX,……,arrayX)
concat() 方法用于连接两个或多个数组。arrayX为n个数组or元素参数
console.info([1].concat([2,3], 4)) //1,2,3,4
apply方法:
fn.apply(obj, args)
在obj的作用域下调用函数fn,并把数组args里的第i个元素作为第i个参数传给fn
例如
fn.apply(window, [1,2,3]) 等于 fn(1,2,3) (直接调用一个函数作用域就是window)
合起来就有上面那个效果了。
3.复制数组
利用Array.splice(0)可以快速复制一个数组
var a = [1,2,3], b = a.splice(0); alert(b)//1,2,3 alert(a==b)//false
4.高效合并字符串
var a = [“<div>”,”<span>”,”</span>”,”</div>”];
alert(a.join(“”)) //”<div><span></span></div>”
通过这种方式合并字符串效率比 + 号高了近七八倍,因为js的机制导致每次给字符串追加内容都是抛弃原有字符串新建另一个追加后的字符串,所以效率会低。
在firefox下测试:
var a = [] for (var i = 0; i < 100000; i++) { a.push("<div>"); } console.time("arr"); a.join(""); console.timeEnd("arr");console.time("str"); var b = ""; for (var i = 0; i < 100000; i++) { b += "<div>"; } console.timeEnd("str"); //arr:19ms //str:141ms
var a = [1,2,3]
b = a.splice(0); ? slice