数组常用方法总结

287 阅读5分钟

数组:数组(Array)是有序的元素序列。

  • push

向数组末尾添加新元素(可一次性添加多个)

返回值:新数组的length

var arr = [ ];
arr[0] = 1;
arr[1] = 2;
arr.push(3); //     [1,2,3]; 
arr.push(5,6,'7')  //  [1,2,3,5,6,'7']
  • unshift

向数组最前面添加新元素(可一次性添加多个)

返回值:新数组的length

var arr = [ ];
arr.unshift(4); // result is [4];
arr.unshift(1,2,3)  // [1,2,3,4]
  • pop

删除数组末尾的一个元素

返回值:被删除的元素

var arr = [ ];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr.pop(); // result is [1,2];
  • shift

删除数组最前面的一个元素

返回值:被删除的元素

var arr = [ ];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr.shift(); // result is [2,3];
  • splice

删除,添加,替换数组中的元素

返回值: 如果有元素被删除,就返回包含被删除元素的新数组。

语法: array.splice(index, howmany, item1,.....,itemX)
参数:
index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。

howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目。

item1, …, itemX: 可选。向数组添加的新项目。
  • 删除元素

let a = [1, 2, 3, 4, 5, 6, 7];
// 从数组下标0开始,删除3个元素
let item = a.splice(0, 3); // [1,2,3]
console.log(a); // [4,5,6,7]
// 从最后一个元素开始删除3个元素,因为最后一个元素,所以只删除了7
let item = a.splice(-1, 3); // [7]
复制代码
  • 删除并添加

let a = [1, 2, 3, 4, 5, 6, 7];
// 从数组下标0开始,删除3个元素,并添加元素'添加'
let item = a.splice(0,3,'添加'); // [1,2,3]
console.log(a); // ['添加',4,5,6,7]
// 从数组最后第二个元素开始,删除3个元素,并添加两个元素'添加1'、'添加2'
let item = a.splice(-2,3,'添加1','添加2'); // [6,7]
console.log(a); // [1,2,3,4,5,'添加1','添加2']
复制代码
  • 不删除只添加

let a = [1, 2, 3, 4, 5, 6, 7];
let item = a.splice(0,0,'添加1','添加2'); // [] 没有删除元素,返回空数组
console.log(a); // ['添加1','添加2',1,2,3,4,5,6,7]
let item = a.splice(-1,0,'添加1','添加2'); // [] 没有删除元素,返回空数组
console.log(a); // [1,2,3,4,5,6,'添加1','添加2',7] 在最后一个元素的前面添加两个元素
  • reverse 翻转数组

let a = [1,2,3];
a.reverse(); 
console.log(a); // [3,2,1]
复制代码
  • sort 数组排序

参数可选: 规定排序顺序的比较函数

默认情况下sort()方法没有传比较函数的话,默认按字母升序,如果元素不是字符串的话,会调用toString()方法将元素转化为字符串的Unicode(万国码)位点,然后再比较字符。

// 字符串排列
var a = ["Banana", "Orange", "Apple", "Mango"];
a.sort(); // ["Apple","Banana","Mango","Orange"]
// 数字排序的时候 因为转换成Unicode字符串之后,有些数字会比较大会排在后面
var a = [10, 1, 3, 20,25,8];
console.log(a.sort()) // [1,10,20,25,3,8];
  • 比较函数的两个参数

正数 位置不变

负数 交换位置

sort的比较函数有两个默认参数,要在函数中接收这两个参数,这两个参数是数组中两个要比较的元素,通常我们用 a 和 b 接收两个将要比较的元素:

  • 若比较函数返回值<0,那么a将排到b的前面;

  • 若比较函数返回值=0,那么a 和 b 相对位置不变;

  • 若比较函数返回值>0,那么b 排在a 将的前面;

  • sort排序常见用法

数组元素为数字的升序、降序:

var array = [10, 1, 3, 4,20,4,25,8];
// 升序 a-b < 0 a将排到b的前面,按照a的大小来排序的 
// 比如被减数a是10,减数是20 10-20 < 0 被减数a(10)在减数b(20)前面 
array.sort(function(a,b){
 return a-b;
});
console.log(array); // [1,3,4,4,8,10,20,25];
// 降序 被减数和减数调换了 20-10>0 被减数b(20)在减数a(10)的前面
array.sort(function(a,b){
 return b-a;
});
console.log(array); // [25,20,10,8,4,4,3,1];
  • join

数组转字符串,join() 方法用于把数组中的所有元素通过指定的分隔符进行分隔放入一个字符串,返回生成的字符串

let a= ['hello','world'];
let str=a.join(); // 'hello,world'
//指定要使用的分隔符,默认使用逗号作为分隔符
let str2=a.join('+'); // 'hello+world'
  • indexOf

查找数组是否存在某个元素,返回下标。返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

参数: searchElement(必须):被查找的元素

fromIndex(可选):开始查找的位置(不能大于等于数组的长度,返回-1),接受负值,默认值为0。

严格相等的搜索: 数组的indexOf搜索跟字符串的indexOf不一样,数组的indexOf使用严格相等===搜索元素,即数组元素要完全匹配才能搜索成功。

注意:indexOf()不能识别NaN

let a=['啦啦',2,4,24,NaN]
console.log(a.indexOf('啦')); // -1 
console.log(a.indexOf('NaN')); // -1 
console.log(a.indexOf('啦啦')); // 0
  • lastIndexOf

arr.indexOf(searchElement[, fromIndex])

查找元素在数组中最后一次出现时的索引,如果没有,则返回-1

searchElement:被查找的元素。 fromIndex 可选

从此位置开始逆向查找。默认为数组的长度减 1(arr.length - 1),即整个数组都被查找。

如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。

如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。

返回值 : 数组中该元素最后一次出现的索引,如未找到返回-1

    const ary = [5, 6, 7, 8, 5];
    ary.lastIndexOf(5);     // 4
    ary.lastIndexOf(1);     // -1
    ary.lastIndexOf(5, 2);  // 0
    ary.lastIndexOf(5, -2); // 0
  • Array.from

将伪数组转换为真正的数组(es6)

伪数组对象: (函数的arguments对象,set数据结构等...) 拥有length属性,但无法使用真数组中的push,unshift等方法

// 1. 伪数组对象
let obj = {0: 'a', 1: 'b', 2:'c', length: 3};
let arr = Array.from(obj); // ['a','b','c'];
// 2. 部署了 Iterator接口的数据结构 比如:字符串、Set、NodeList对象
let arr = Array.from('hello'); // ['h','e','l','l']
let arr = Array.from(new Set(['a','b'])); // ['a','b']
  • toString 数组转字符串,toString() 方法可把数组转换为由逗号链接起来的字符串

当数组和字符串操作的时候,js 会调用这个方法将数组自动转换成字符串

let b= [ 'toString','演示'].toString(); // toString,演示
let a= ['调用toString','连接在我后面']+'嘟嘟嘟'; // 调用toString,连接在我后面嘟嘟嘟
  • Array.isArray()

Array.isArray(obj)

判断传递的值是否是一个数组

返回值:布尔值

    Array.isArray([])           // true
    Array.isArray({})           // false
    Array.isArray('a')          // false
    Array.isArray(1)            // false
    Array.isArray(null)         // false
  • concat 合并数组

var arr = [1,2,3];
var arr1 = [4,5,6];
var arr2 = arr.concat(arr1);
console.log(arr2); // [1,2,3,4,5,6];