JS数组

来源:互联网 发布:怎么在美拍加淘宝链接 编辑:程序博客网 时间:2024/06/06 01:37

Array(数组)是javascript中复杂的数据类型,同时,Array也是内建的一个核心类,一个数组就是Array类的一个实例,可以使用Array类的方法和属性操作数组。

需要记住的是,与其他语言相比,javascript数组中的元素不必为相同的数据类型,可以在数组每个元素上混合使用数字、日期、字符串、Object,甚至添加一个嵌套数组。

实质上,Array是一系列项目的集合,其中的项目也被称为元素,可以使用索引来访问。

————《javascript权威指南》

1. 创建数组

1.1 创建数组的方法

Array类的构造方式有三种,分别是:
new Array();
new Array(length);
new Array(element0,element1,element2…elementN);
例如:
var a = new Array();
var b = new Array(3);
var c = new Array(“one”,”two”,”three”);

数组的第一个元素的索引总是0,在使用第2种方法的时候初始长度是固定的,后续添加元素的时候总长度是可以增加的。
另外,也可以使用[]来初始化数组,例如:
var array = ["one","two","three","four"];

1.2 数组的属性

  1. 变长数组
    javascript数组的长度可以进行自动扩充,所以如果数组的初始长度确定,后续也可以根据索引值进行添加数据。
  2. 元素可为空
    如果数组中某一个小于元素索引长度的元素未定义,那么就会为该元素自动赋值一个undefined值。

2. 数组常用API

2.1 常用方法

Array类的方法

方法 功能描绘 concat 连接参数并把它作为新数组返回 every 对数组的每一项进行测试,直到有一项不满足指定函数,结束测试返回false;全部满足的话返回true。 filter 对数组的每一项进行测试,返回一个新数组,新数组中的元素都对指定函数返回true。 forEach 没有返回值,但是对数组的每一项可以进行更改 map 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,不会改变原始数组 some 对数组中的只进行测试,直到返回true indexOf 使用全等运算符(===)搜索数组中的项,并返回该项索引位置 lastIndexOf 使用全等运算符(===)搜索数组中的项(从最后一项开始),并返回该项索引位置 isArray 判断参数是否是数组 pop 删除数组中的最后一个元素,并返回该元素值 push 把一个或多个元素添加到数组的末尾并返回新数组的长度 shift 删除数组的第一个元素,并返回该元素的值 unshift 把一个或多个元素添加到数组的开端并返回数组的新长度 reserve 反转数组元素 slice 截取数组中的一个片断,并把该片段作为新数组返回 splice 向数组中添加或移除元素 toString 返回一个字符串数据,使用逗号隔开各元素 sort 对数组元素进行排序 join 把数组的所有元素放入一个字符串。

2.2 方法示例

  1. every()方法
//检测数组 num 的所有元素是否都大于 18 :var num = [28, 30, 16, 11, 88, 24];var test = num.every(function(element,index,arr){  return element>=18;});document.write(test);

输出结果为:
false
2. filter()方法

//检测数组 num 的所有元素是否都大于 18 :var num = [28, 30, 16, 11, 88, 24];var test = num.filter(function(element,index,arr){  return element>=18;});document.write(test);

输出结果为:
28,30,88,24
3. forEach()方法

var num = [28, 30, 16, 11, 88, 24];num.forEach(function(element,index,arr){  arr[index] = index+"==="+element;});document.write(num);

输出结果为:
0===28,1===30,2===16,3===11,4===88,5===24
4. map()方法

//数组 num 的所有元素都加上 18 :var num = [28, 30, 16, 11, 88, 24];var test = num.map(function(element,index,arr){  return element+=18;});document.write(test);

输出结果为:
46,48,34,29,106,42
5. some()方法

//检测数组 num 的所有元素是否存在小于 18 的数:var num = [28, 30, 16, 11, 88, 24];var test = num.some(function(element,index,arr){  return element<18;});document.write(test);

输出结果为:
true
注:上述括号内的匿名函数function(element,index,arr),可用于every(),filter(),map(),some(),forEach() 函数中;参数 element 代表当前元素的值,必须要有;参数 index 代表当前元素的索引值,可选;参数 arr 代表当前元素属于的书租对象,可选。
6. isArray()方法

var num = [28, 30, 16, 11, 88, 24];var str = "hi";console.log(Array.isArray(num));console.log(Array.isArray(str));

输出结果为:
true
false
7. indexOf() 和 lastIndexOf()方法

var num = [88, 30, 16, 11, 88, 24];console.log(num.indexOf(88));console.log(num.lastIndexOf(88));

输出结果为:
0
4
8. slice()方法

var num = [88, 30, 16, 11, 88, 24];console.log(num.slice(2,5));console.log(num);

输出结果为:
Array [ 16, 11, 88 ]
Array [ 88, 30, 16, 11, 88, 24 ]
slice()方法不会改变原数组。
9. splice()方法

var num = [88, 30, 16, 11, 88, 24];num.splice(2,0,"a","b","c");console.log(num);num.splice(2,2);console.log(num);num.splice(2);console.log(num);

输出结果为:
Array [ 88, 30, "a", "b", "c", 16, 11, 88, 24 ]
Array [ 88, 30, "c", 16, 11, 88, 24 ]
Array [ 88, 30 ]

语法:array.splice(index,howmany,item1…itemN)

参数 描述 index 必须,规定从何处添加删除元素 howmany 必须。规定必须删除多少元素,必须是数字或”0”。没有规定此参数的话会删除index后所有元素。 item1, …, itemX 可选。要添加到数组的新元素

10. join()方法

var num = [88, 30, 16, 11, 88, 24];console.log(num.join("-"));console.log(num.join());

输出结果(默认是以“,”进行连接):
88-30-16-11-88-24
88,30,16,11,88,24
11. sort()方法
* 默认情况下的排序

var num = [88, 30, 2, 16,8, 11, 88, 24];num.sort();console.log(num);

输出结果:
Array [ 11, 16, 2, 24, 30, 8, 88, 88 ]
* 自定义排序
指定一个比较函数,那么该函数必须返回以下数值:
1. -1,表示第一个参数比第二个参数小
2. 0,表示两个参数相等
3. 1,表示第一个参数比第二个参数大

var num = [88, 30, 2, 16, 8, 11, 88, 24];num.sort(function(a,b){  return a-b;});console.log(num);

输出结果:
Array [ 2, 8, 11, 16, 24, 30, 88, 88 ]


#遗留问题

array数组浅拷贝和深拷贝。

0 0
原创粉丝点击