1 数组
###1.0 前言
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。 看完js,写一篇对数组的笔记。
1.1 定义
承载一些有序数据的集合,下标从0开始。
1.2 数组的创建
-
字面量创建
var a = [1,2,'1','abc'] console.log(a); -
内置构造函数
var a = new Array() console.log(a); //可创造有长度的数组 var a1 = new Array(10); console.log(a1); //还可以创建带有数据的数组 var a2 = new Array('anme','sss',1,2,3); console.table(a2);
1.3 数组的基本属性
-
length属性 读/写
var a = new Array('anme','sss',1,2,3); console.log(a.length); a.length = 7; // 如果比原长度大,则会用empty填充,如果比原来小,会从后面删除数据 console.log(a.length); -
索引属性 读/写
var a = new Array('anme','sss',1,2,3); console.log(a[1]); //输出对应下标数据 console.log(a[100]); //undefined a[1] = 'abc'; //修改 a[10] = '10'; //添加一个数据,没有数据的用empty填充,即undefined console.table(a);可以
arr[arr.length] = a;刚好在原数组追加一位。
1.4 遍历数组
for循环遍历下标for in循环遍历有效数据
var a = [0];
a[2] = 3;
console.table(a);
for(let i = 0;i < a.length;i++){
console.log(a[i]);
}
console.log('------------------');
for(let i in a){
console.log(a[i]);
}
1.5 数组常用方法1
只能对数组使用,不能给对象用。
-
push(data) 末尾追加数据,返回数组最新长度。
-
pop() 删除末尾数据,返回被删除数据。
-
unshift(data) 数组最前插入数据,返回数组最新长度。
-
shift() 删除数组最前数据,返回被删除数据。
-
reverse() 反转数组,返回被反转后的数组。
-
sort() 排序数组,返回被排序后的数组。默认按字典序排序。
可以添加参数决定排序依据。
a.sort((a,b) => a - b); -
splice(start,len,data) 截取(剪切)数组并选择性插入数据,返回一个新数组。
a.splice(index,0,data);可以在index位置插入data。var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(a); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] // 返回被截取的数据 console.log(a.splice(1, 5)); // [ 1, 2, 3, 4, 5 ] console.log(a); // [ 0, 6, 7, 8, 9, 10 ] // 从截取开始的位置插入数据 console.log(a.splice(1, 3, 1, 2, 3, 4, 5, 6, 7, 8)); // [ 6, 7, 8 ] console.log(a); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] a.splice(1, 0, 'data'); console.log(a); // [ 0, 'data', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
1.6 数组常用方法2
不会改变原始数组
-
concat() 将数组拼接,返回拼接好的数组。
-
join('连接符') 使用连接符将数组每一项连接成一个字符串,返回连接好的字符串。连接符不写默认
, -
slice(start,end) 包含[start],不包含[end],截取(复制)数组数据,返回新数组。
satrt默认0,end默认为length,可以填负数。
-
indexOf(data,start) 从[start]开始检索数组中是否存在data,如果有返回第一次出现的下标,如果没有返回-1。
-
lastIndexOf(data,start) 从[start]开始向前检索数组中是否存在data,如果有返回第一次出现的下标,如果没有返回-1。
var a = [0, 1, 2, 3, 4,5, 5, 6, 7, 8, 9, 10];
var b = ['a','b','c']
console.log('concat',a.concat(b));
console.log('join',a.join(' * '));
console.log('slice',a.slice(2,5));
console.log('indexOf',a.indexOf(5));
console.log('lastIndexOf',a.lastIndexOf(5));
console.log('a',a);
console.log('b',b);
1.7 数组常用方法3
-
forEach(function(value,index,array) {}) 函数可接收三个参数。遍历数组。
-
map(function(value,index,array) {}) 函数可接收三个参数。映射数组,返回新数组,长度与原数组一致,映射方式以return 给出。
-
filter(function(value,index,array) {})) 函数可接收三个参数。过滤数组,返回新数组,以return形式书写过滤条件。
-
every(function(value,index,array) {})) 函数可接收三个参数。判断数组全部数据,返回布尔值,以return形式书写判断条件。
-
some(function(value,index,array) {})) 函数可接收三个参数。判断数组某个数据,返回布尔值,以return形式书写判断条件。
-
find(function(value,index,array) {})) 函数可接收三个参数。查找数组某个数据,返回数据,以return形式书写查找条件。
通常用于复杂数据类型。
-
reduce(function(prev,value,index,array){},init) 叠加累计,以return书写叠加条件,如无init,则perv默认为[0]。
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var ans = 0;
a.forEach((a) => ans += a);
console.log(ans);
b = a.map((a) => a * 2);
console.table(b);
b = a.filter((a,b) => b % 3 == 1)
console.table(b);
console.log(a.every((a) => a <= 10));
console.log(a.some((a) => a > 5));
var stu = [{id : '101',name : 'AAA'},{id : '102',name : 'BBB'},{id : '103',name : 'CCC'}];
console.log(stu.find((a) => a.id === '102'));
console.log(a.reduce((prev,cv) => {return prev * cv},10));
数组去重方法:
- 循环去重。
- indexOf()找出重复数据。
- 利用对象,将数组数据作为key。只对纯数字数组比较友好。
- 利用set,不接受重复数据。
new Set();Array.from(new Set(arr));[...new Set(arr)];