JS数组

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数组浅拷贝和深拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值