数组是大多数语言里面最常见的一种数据结构,它是一个有序的值列表。
创建数组
1、字面量创建数组
let arr = [];
2、构造函数创建数组
let arr = new Array();
无论是字面量还是构造函数创建 用 typeof 都会返回一个 object 因为数组是复杂数据类型
let arr1 = [];
let arr2 = new Array();·
console.log(typeof arr1); // object
console.log(typeof arr2); // object
数组赋值
1、先声明在赋值
let arr = [];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
注意下标是从0开始的。
2、声明是直接赋值
let arr = [1,2,3,4,5];
注意:数组可以在任意位置赋值,长度也会自动改变,空出的位置会用undefined填充
let arr = [];
arr[0] = 1;
arr[4] = 10;
console.log(arr);// [ 1, <3 empty items>, 10 ]
//访问元素
console.log(arr[1]);//undefined
console.log(arr[0]);//1
由于javascript动态语言,数组类型可以是任意类型
let arr = [1,"Hello",3.14,true];
删除元素
可以用 delete
删除数组某一个元素
let arr = [1,2,3,4,5];
delete arr[2]; // 删除数组中第三个元素
console.log(arr);
// [ 1, 2, <1 empty item>, 4, 5 ]
属性和方法
相关属性
length
这个属性,用于返回该数组元素个数。
let arr = [1,2,3,4,5];
console.log(arr.length); // 5
也可以利用这个属性快速的的清空数组
let arr = [1,2,3,4,5];
arr.length = 0;
console.log(arr); // []
也可以对数组的长度进行操控
let arr = [1,2,3,4,5];
arr.length = 3;
console.log(arr); // [1,2,3]
相关方法
添加
1、push()
方法:在数组最后添加一个或多个元素
push执行后会返回新数组的长度
let arr = [1];
let i = arr.push("red","blue");
console.log(arr); // [1, 'red', 'blue' ]
console.log(i); // 2 该数组长度
2、unshift()
在数组最前面添加一个或多个元素
let arr = [1];
arr.unshift("red","green","pink");
console.log(arr); // [ "red","green","pink",1 ]
删除
1、pop()
删除数组最后一个元素,pop执行后会返回被删除元素内容
let arr = ["red","blue"];
arr.pop();
console.log(arr); // [ 'red' ]
2、shift()
删除数组第一个元素,shift执行后会返回被删除元素内容
let arr = ["red","blue"];
arr.shift();
console.log(arr); // [ 'blue' ]
操作方法
concat()
先创建一个副本,然后将接收的参数添加到副本尾部,原本数组不会变化
let arr = [1,2,3];
let arr2 = arr.concat("red","blue");
console.log(arr);//[ 1, 2, 3 ]
console.log(arr2);//[ 1, 2, 3, 'red', 'blue' ]
slice()
截取
表示返回截取下标为多少,和以后的内容
1、第一个代表起始位置
2、第二个代表结束位置
最后得到的内容是:
下标第一个数内容截取,截取内容到第二个数,但不包含第二个数内容。
从下表为多少的内容截取,截取个数为:第一个数~第二个数(个)。
如果是负值,截取的位置就相当于用数组的长度加上这个负值,不会影响原数组
let arr = [1,2,3,4,5,6,7,8,9,10];
// 一个参数
let i = arr.slice(3);
console.log(i); // [ 4, 5, 6, 7, 8, 9, 10 ]
console.log(arr); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
// 二个参数
let j = arr.slice(2,6);
console.log(j); // [ 3, 4, 5, 6 ]
console.log(arr); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
//负数
let arr = [1,2,3,4,5,6,7,8,9,10];
// 一个参数
let i = arr.slice(-3);// 等价slice(7)
console.log(i); // [ 8, 9, 10 ]
// 两个参数
let j = arr.slice(-6,-2); // 等价slice(4,8)
console.log(j); // [ 5, 6, 7, 8 ]
// 不满足条件返回空数组
let k = arr.slice(-2,-6); // 等价slice(8,4)
console.log(k); // []
splice()
这个方法功能相对强大很多可以:删除,插入,替换
参数1:代表起始位置
参数2:代表想要删除的个数
参数2+n:代表插入的元素
删除
let arr = [1,2,3,4,5,6,7,8,9,10];
// 从下标为3的元素开始删除,删除5个元素
//将删除的元素返回给i
let i = arr.splice(3,5);
console.log(i); // [ 4, 5, 6, 7, 8 ]
console.log(arr); // [ 1, 2, 3, 9, 10 ]
插入
let arr = [1,2,3,4,5,6,7,8,9,10];
//从下标为3的元素之前开始插入
let i = arr.splice(3,0,"red","blue");
console.log(i); // []
console.log(arr);
// [ 1, 2, 3, 'red', 'blue', 4, 5, 6, 7, 8, 9, 10 ]
替换
let arr = [1,2,3,4,5,6,7,8,9,10];
//从下标为3的元素之前开始插入
//插入多少,就刚好删除多少
let i = arr.splice(3,2,"red","blue");
console.log(i); // [ 4, 5 ]
console.log(arr);
// [ 1, 2, 3, 'red', 'blue', 6, 7, 8, 9, 10 ]
数组和字符串互相转换
join()
是将始终转换为字符串,可以传入分隔符作为参数
let arr = [1,2,3];
let str = arr.join("");
console.log(str); // 123
let str2 = arr.join(",");
console.log(str2); // 1,2,3
split()
是将字符串转换为数组,传入参数指明以什么作为分隔符
let str = "Hello";
let arr = str.split("");
console.log(arr); // [ 'H', 'e', 'l', 'l', 'o' ]
let arr2 = str.split("l");
console.log(arr2); // [ 'He', '', 'o' ]
数组排序方法
reverse()
用于数组的倒序,会改变原来数组
let arr = [1,2,3,4,5];
console.log(arr.reverse()); // [ 5, 4, 3, 2, 1 ]
console.log(arr); // [ 5, 4, 3, 2, 1 ]
sort()
是按照升序排列数组每一项 ,用时需要传入回调函数
let arr = [0,12,3,7,-12,23];
console.log(arr.sort(function(a,b){
if(a < b){
return -1;
}else if(a > b){
return 1;
}else{
return 0;
}
}));
//如果是倒序修改返回值即可
let arr = [0,12,3,7,-12,23];
console.log(arr.sort(function(a,b){
if(a < b){
return 1;
}else if(a > b){
return -1;
}else{
return 0;
}
}));
//简化后
let arr = [0,12,3,7,-12,23];
console.log(arr.sort(function(a,b){
return a - b;
// 降序就返回 b - a
}));
//使用箭头函数更加简洁
let arr = [0,12,3,7,-12,23];
console.log(arr.sort((a,b)=>a-b));
位置方法
indexOf()
从左往右,去找元素,返回第一个满足条件的下标
lastIndexOf
从右往左,去找元素,返回第一个满足条件的下标
不存在的数返回值为-1,有返回下标,这个两个方法进行查找使用的都是全等进行比较
let arr = ["H","e","l","l","o"];
console.log(arr.indexOf("l")); // 2
console.log(arr.lastIndexOf("l")); // 3
console.log(arr.indexOf("z")); // -1
includes()
用于查询数组是否包含某元素,包含返回true,否则返回false
let arr = ["1","2","3"];
console.log(arr.includes(2)); // flase
console.log(arr.includes("2")); // true
console.log(arr.includes(7)); // false
find()
方法返回通过测试(函数内判断)的数组的第一个元素的值.否则返回undefined
let array1 = [5, 12, 8, 110, 88];
let found = array1.find(element => {
return element > 10;
});
console.log(found);
// output: 12