廖雪峰JS教程学习记录---数组详解

数组详解

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

要取得Array的长度,直接访问length属性:

var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length; // 6

请注意,直接给Arraylength赋一个新的值会导致Array大小的变化:

var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr变为[1, 2]

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

var arr = ['A', 'B', 'C'];
arr[1] = 99;
arr; // arr现在变为['A', 99, 'C']

请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']

大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。

在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。

初始化数组

var a = new Array();
  var a = new Array(10);//10代表数组的长度
  var a = new Array('10');//初始化化数组,数组长度为1      

数组读和写的方式

读__a[a.length-1]//访问数组最后一项

写 

a[100] = 0//这时数组的长度为100,没有初始化的默认值为undefined

 

                                                                          数组方法

1.栈方法(后进先出)

push()=>接收/任意数量的参数/,把它们逐渐添加到数组/末尾/,并返回修改后/数组的长度/(后进)
pop()=>数组末尾移除/最后一项/,减少数组的length值,然后返回/移除的项/(先出)

push()方法----返回值为:数组的新长度

pop()方法----返回值为:删除的那个元素,空数组不报错,返回undefined

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; // []

2.队列方法(先进先出)

unshift()=>接收任意数量的参数,把它们逐渐添加到数组/前端/,并返回修改后/数组的长度/(先进)
shift()=>移除数组中的/第一个项/,减少数组的length值,并返回/移除的项/(先出)

unshift()方法返回值----数组的新长度
shift()方法返回值----删除的元素,空数组不报错,返回undefined
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; // []

3.indexOf

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

返回值为指定元素的索引值,当未找到返回值为-1

arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1

4.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']

5.slice

slice()就是对应String的substring()版本,它截取Array的部分元素

返回值为一个新的Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']

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

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

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var aCopy = arr.slice();
aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
aCopy === arr; // false
因为aCopy是克隆出来的新对象,哪怕数组中的元素一模一样,但aCopy跟arr都是两个对象,两个对象又不是指向同一块内存空间,所以不相等

6.sort

默认情况下sort()方法按升序排列数组项,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort()方法比较的也是字符串。
因此sort()方法可以接收一个比较函数作为参数,以便我们指定那个位置位于那个位置前面。比较函数接收两个参数,如果第一个参数位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数位于第二个参数之后则返回一个正数。由于比较函数通过返回一个小于0、等于0或大于0的值来影响排序结果,因此减法操作就可以适当的处理所有情况。

返回值----变化后的数组

重排序方法(默认升序<0)==>
a.sort(function(value1,value2){return value1-value2})

var a = ['ab','bc','abc'];
a.sort()//['ab','abc','bc'];
--------------------------------------------
var a = [2,20,3];
a.sort()//[2, 20, 3](20转换为字符串)
--------------------------------------------
var a = ['ant','Bug','cat','Dog'];
a.sort()//["Bug", "Dog", "ant", "cat"](大写字母排前面)
a.sort(function(a,b){a.toLowerCase()<b.toLowerCase()})//["ant", "Bug", "cat", "Dog"]

7.reverse

reverse()把整个Array的元素给掉个个,也就是反转:

返回值----变化后的数组

8.concat

concat()方法把当前的Array和另一个Array连接起来

返回值----一个新的Array


请注意concat()方法并没有修改当前Array,而是返回了一个新的Array

实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

9.join

join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

如果Array的元素不是字符串,将自动转换为字符串后再连接。

多维数组

如果数组的某个元素又是一个Array,则可以形成多维数组,例如:

var arr = [[1, 2, 3], [400, 500, 600], '-'];

上述Array包含3个元素,其中头两个元素本身也是Array

通过索引取到500这个值:arr[1][1];

 
原文地址:https://www.cnblogs.com/shiliu123456/p/5706187.html