JavaScript 处理数组函数总结

JavaScript的array可以包含任意数据类型,并通过索引来访问每个元素。

1、获取数组长度

直接访问length属性获取数组长度:

var arr = [1,'hihi',3.14,null,true];
arr.length;//5
注意:直接给Array的length赋一个新的值会导致Array大小的变化:

var arr = [1,2,3];
arr.length;//3
arr;//1,2,3
arr.length = 5;
arr[3];//1,2,3,undefined,undefined
arr.length = 2;
arr;//1,2

2、修改数组元素

Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array:

var arr = [1,2,3];
arr[2] = 5;
arr;//1,2,5
注意:如果通过索引赋值时,索引超过了范围,仍然会引起Array的大小变化:

var arr = [1,2,3];
arr[5] = 8;
arr;//1,2,3,undefined,undefined,8
建议:大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。

3、indexOf

与String类似,Array也可以通过indexOf()来搜索一个指定的元素在Array中首次出现的位置:

var arr = [10,20,'30',20,30];
arr.indexOf(20);//1
arr.indexOf(20,2)//3
补充:

stringObject.indexOf(searchvalue,fromindex)

searchvalue: 必需。规定需检索的字符串值。
fromindex: 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

  1. indexOf() 方法对大小写敏感!

  2. 如果要检索的字符串值没有出现,则该方法返回 -1。

4、slice

slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array:

var arr = ['A','B','C','D','E','F','G'];
arr.slice(1,3);//['B','C']
arr.slice(3);//['D','E','F','G']
arr.slice(3,50);//['D','E','F','G']
arr.slice(-3);//['E','F','G']
arr.slice(3,-2);//['D','E']
注意

  1. 到slice()的起止参数包括开始索引,不包括结束索引。

  2. 如果结束索引省略,将返回从开始索引到数组结束的所有元素。

  3. 如果结束索引超过了范围,将返回从开始索引到数组结束的所有元素。

  4. 开始索引可以去负值,它规定从从数组尾部开始算起的位置。

补充:

arrayObject.slice(start,end)

start: 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。(这里的必需,有待商榷,实际上不写也是可以的)
end: 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

  1. 请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

小技巧:复制数组
如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array:

var arr = ['A','B','C','D','E','F','G'];
var aCopy = arr.slice();
aCopy;//['A','B','C','D','E','F','G']
arr === aCopy;//false(如果,你不知道这里为什么是false,那么你应该去看看原始值和引用对象)

5、push和pop

var arr = [1, 2];
arr.push('A', 'B'); // 返回Array新的长度: 4
arr; // [1, 2, 'A', 'B']
arr.pop(); // pop()返回'B'
arr; // [1, 2, 'A']
arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
arr; // []
arr.pop(); // 空数组继续pop不会报错,而是返回undefined
arr; // []
补充:
(1)push: 方法可向数组的末尾添加一个或多个元素,并返回Array新的长度。

arrayObject.push(newElement1,newElement2,...,newElementX)

newElement1: 必需。要添加到数组的第一个元素。
newElement2: 可选。要添加到数组的第二个元素。
newElementX: 可选。可添加多个元素。

  • 返回值:把指定的值添加到数组后的新长度。
  • push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它 直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。

(2)pop: 方法用于删除并返回数组的最后一个元素

arrayObject.pop()

  • 返回值:arrayObject 的最后一个元素。
  • pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

    6、unshift和shift

    unshift和shift的作用于push和pop类似,只不过前者操作的是Array的头部.

var arr = [1, 2];
arr.unshift('A', 'B'); // 返回Array新的长度: 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
arr; // []
arr.shift(); // 空数组继续shift不会报错,而是返回undefined
arr; // []
注意: unshift() 方法无法在 Internet Explorer 中正确地工作!

7、sort

sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序(将按字母顺序对数组中的元素进行排序)排序:

var arr = ['c','b','a','C','B','A'];
arr.sort();
arr;//['A','B','C','a','b','c'];
补充

arrayObject.sort(sortby)

sortby: 可选。规定排序顺序。必须是函数。

  1. 返回值:对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

  2. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

  3. 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  4. 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

  5. 若 a 等于 b,则返回 0。

  6. 若 a 大于 b,则返回一个大于 0 的值。

举例说明:
实例1:按数字大小对数字排序

function sortNumber(a,b){
return a-b
}

var arr=[3,5,1,10,21];
arr.sort();
arr;//[1,10,21,3,5];
arr.sort(sortNumber);
arr;//[1,3,5,10,21]
实例2:默认情况下,对字符串排序,是按照ASCII的大小比较的,现在,我们提出排序应该忽略大小写,按照字母序排序

var arr = ['Google','apple','Microsoft','BUPT'];
arr.sort();
arr;//['BUPT','Google','Microsoft','apple'];
arr.sort(function(s1,s2){
var x1 = s1.toLowerCase();
var x2 = s2.toLowerCase();
if(x1x2)
return 1;
return 0;
});
arr;//['apple','BUPT','Google','Microsoft']

8、reverse

将整个Array的元素给掉个(gě)个(gè),也就是反转:

var arr = ['one','two','three'];
arr.reverse();
arr;//['three','two','one'];
注意:该方法会直接改变原来的数组,而不会创建新的数组。

9、splice

splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
补充:

arrayObject.splice(index,howmany,item1,item2,...,itemx)
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

index: 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany: 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1,item2,...,itemx: 可选。向数组添加的新项目。

  1. 返回值:包含被删除项目的新数组,如果有的话。

注意:

  1. splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

  2. 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

  3. 请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。

未完待续。。。

参考

1、数组-廖雪峰的官方网站
2、js中substr,substring,indexOf,lastIndexOf的用法小结

关键字:arr, array, var, JavaScript

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部