JavaScript欲速则不达—数组方法

javascript中数组是一个有序的、值的集合。每个值叫做一个元素,每个元素对应一个下标(index),而且同一数组的不同元素可以是不同类型的。

javascript数组对象的属性

length

数组的length既可以读特可以写。

虽然可以设置 length 属性可改变数组的大小,但是却有一些问题。如果设置的值比其当前值小,其底部的元素将被截断。如果设置的值比它的当前值大,新增的元素被添加到数组的尾部,并且值为 undefined。

var arr = new Array(4);
arr[0] = "h"
arr[1] = "u"
arr[2] = "p"
arr[3] = "u"
 
console.log(arr);  //["h", "u", "p" "u"]
console.log(arr.length);  //4
 
arr.length = 2;
 
console.log(arr);  //["h", "u"]
console.log(arr.length);  //2
 
arr.length = 5;
 
console.log(arr);  //["h", "u", undefined, undefined, undefined]
console.log(arr.length);  //5
 			

javascript数组对象的方法

  • 不改变原数组的方法:concat()、slice()、join()、toString()、valueOf()
  • 改变原数组的方法:pop() 、push()、reverse()、shift()、unshift()、sort()、splice()

concat()

concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

语法:

arrayObject.concat(arrayX,arrayX,......,arrayX)
 		

ps:参数是数组的话会将数组展开,如果是数组包含数组,则不会递归展开数组里的数组。如下:

			var a = [1,2,3];
			a.concat(4,5); // [1,2,3,4,5]
			a.concat([4,5],[6,7]); // [1,2,3,4,5,6,7]
			a.concat([4],[5,[6,7]]); // [1,2,3,4,5,[6,7]]
 		

slice()

slice()方法返回指定数组的一个片段。两个参数指定了要返回的片段的起止点。

语法:

arrayObject.slice(start,end)
 		

第一个参数是必须的。如果只有第一个参数,那么返回的数组将包含起始位置开始到元数组结束处;如果参数是 -n(负数)则指定的位置相当于数组的最后 n 个位置。事例如下:

var a = [1,2,3,4,5];
a.slice(0,3) // [1,2,3]
a.slice(3) // [4,5]
a.slice(1,-1) // [2,3,4]
a.slice(-3,-2) // [3]
 		

splice()

splice()插入或删除数组元素的通用方法,然后返回被删除的项目。。虽然名字跟slice()类似,但是功能上却差很多。

语法:

arrayObject.splice(index, howmany, element1, ….., elementX)
 		

参数说明

  • 参数index是必需的。规定从何处添加/删除元素,该参数是开始(包含)插入和(或)删除的数组元素的下标,必须是数字。
  • 参数howmany是必需的。规定应该删除多少元素。必须是数字,但可以是 “0″。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
  • 参数element1…elementX是可选的。规定要添加到数组的新元素,从 index 所指的下标处开始插入。

事例如下:

var a = [1,2,3,4,5,6,7,8];
console.log( a.splice(4) ) // 删除了5,6,7,8 最后a=[1,2,3,4]
console.log( a.splice(1,2) ) // 删除了2,3 最后a=[1,4]
console.log( a.splice(1,1) ) // 删除了4 最后a=[1]
console.log( a.splice(1,0,'a','b') )  // 没有删除任何元素 最后 a = [1, "a", "b"] 
console.log( a.splice(1,2,[2,3],4) )  // 删除了 ["a", "b"] 最后 a = [1, [2,3], 4] 
 		

push()和pop()

push()可以将一个或多个元素推入到数组底部,然后返回数组的新长度;pop()则刚好相反,它则删除底部的最后一个元素,减少数组的长度,返回他删除的值。用法如下:

var stack = [];
console.log( stack.push(1,2) ); // a = [1,2] 返回 length 2 
console.log( stack.pop() ); // a = [1] 返回 被删除的元素 2 
 		

unshift() 和 shift()

push()和pop()是在底部操作,而 unshift() 和 shift()则是在头部操作。

unshift()可以将一个或多个元素插入到数组头部,然后返回数组的新长度;shift()则刚好相反,它是删除头部的第一个元素,减少数组的长度,返回他删除的值。用法如下:

var a = [];
console.log( a.unshift(1) ); // 返回 length :1 a = [1]
console.log( a.unshift(22) ); // 返回 length :2 a = [1,22]
console.log( a.shift()) // 返回被删除的元素 22 ,a =[1]
console.log( a.unshift(-3,[-2,-1])) // 返回length :2 ,a =[1]
console.log( a ) // 返回被删除的元素 22 ,a =[1]
 		

join()

join()方法将数组中所有元素都转换为字符串并连接在一起,最后返回字符串。参数代表分隔符,如果不指定分隔符,默认使用逗号。如下:

 			var a  = [1,2,3];
 			a.join(); // "1,2,3" 
 			a.join('-') // "1-2-3"
 		

join()参数为空跟 toString() 方法效果一样。

reverse()

reverse()将数组中的元素颠倒数序,返回逆序的数组。它采取的是在原先的数组中重新排列它们。

sort()

sort()将数组中的元素排序并返回排序后的数组。当不带参数调用 sort()方法时,数组元素以字母顺序排序。如果数组包含 undefined ,它们则会排到数组的尾部。

为了按照其他方式而非字母表顺序进行排序,必须给sort()方法传递一个比较函数。该函数决定了他的两个参数在排好序的数组中的先后顺序。假设如果想让第一个参数在前,比较函数应该返回一个小于0的数。反之则返回一个大于0的数,并且当两个值相等值应该返回0。

var arr = [10,5,40,25,1000,1];
function sortNumber(a,b)
{
  return a - b;
}
console.log(arr);  //["10", "5", "40", "25", "1000", "1"]
console.log(arr.sort());  //["1", "10", "1000", "25", "40", "5"]
console.log(arr.sort(sortNumber));  //["1", "5", "10", "25", "40", "1000"]
 		

JavaScript里面,没有原生的方法来区别Array和Object,一般可以通过下面的方法来识别数组:

var isArray = function(value){
  return Object.prototype.toString.apply(value) === '[object Array]';
}

Object.prototype.toString对任何变量会永远返回这样一个字符串“[object, class]”,而这个class就是JavaScript内嵌对象的构造函数的名字。至于用户自定义的变量,则class等于object。因此通过Object.prototype.toString.apply(obj)可以准确的获取变量数据类型。关于类型检测可参考此文

关于ECMAScript5中的数组方法,下次再整理

本文源链接:http://www.html5jscss.com/array-method.html

转载请注明《JavaScript欲速则不达—数组方法》| html5jscss

评论关闭了.