2.JavaScript中的数组方法

128 阅读4分钟

1 数组

###1.0 前言

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。 看完js,写一篇对数组的笔记。

1.1 定义

承载一些有序数据的集合,下标从0开始。

1.2 数组的创建

  1. 字面量创建

    var a = [1,2,'1','abc']
    console.log(a);
    
  2. 内置构造函数

    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 数组的基本属性

  1. length属性 读/写

    var a = new Array('anme','sss',1,2,3);
    console.log(a.length);
    a.length = 7;
    // 如果比原长度大,则会用empty填充,如果比原来小,会从后面删除数据
    console.log(a.length);
    
  2. 索引属性 读/写

    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 遍历数组

  1. for循环遍历下标
  2. 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

只能对数组使用,不能给对象用。

  1. push(data) 末尾追加数据,返回数组最新长度。

  2. pop() 删除末尾数据,返回被删除数据。

  3. unshift(data) 数组最前插入数据,返回数组最新长度。

  4. shift() 删除数组最前数据,返回被删除数据。

  5. reverse() 反转数组,返回被反转后的数组。

  6. sort() 排序数组,返回被排序后的数组。默认按字典序排序。

    可以添加参数决定排序依据。a.sort((a,b) => a - b);

  7. 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

不会改变原始数组

  1. concat() 将数组拼接,返回拼接好的数组。

  2. join('连接符') 使用连接符将数组每一项连接成一个字符串,返回连接好的字符串。连接符不写默认,

  3. slice(start,end) 包含[start],不包含[end],截取(复制)数组数据,返回新数组。

    satrt默认0,end默认为length,可以填负数。

  4. indexOf(data,start) 从[start]开始检索数组中是否存在data,如果有返回第一次出现的下标,如果没有返回-1。

  5. 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

  1. forEach(function(value,index,array) {}) 函数可接收三个参数。遍历数组。

  2. map(function(value,index,array) {}) 函数可接收三个参数。映射数组,返回新数组,长度与原数组一致,映射方式以return 给出。

  3. filter(function(value,index,array) {})) 函数可接收三个参数。过滤数组,返回新数组,以return形式书写过滤条件。

  4. every(function(value,index,array) {})) 函数可接收三个参数。判断数组全部数据,返回布尔值,以return形式书写判断条件。

  5. some(function(value,index,array) {})) 函数可接收三个参数。判断数组某个数据,返回布尔值,以return形式书写判断条件。

  6. find(function(value,index,array) {})) 函数可接收三个参数。查找数组某个数据,返回数据,以return形式书写查找条件。

    通常用于复杂数据类型。

  7. 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));

数组去重方法:

  1. 循环去重。
  2. indexOf()找出重复数据。
  3. 利用对象,将数组数据作为key。只对纯数字数组比较友好。
  4. 利用set,不接受重复数据。new Set(); Array.from(new Set(arr)); [...new Set(arr)];