标有 -
表示会改变原数组;标有 *
表示字符串也有同名方法
unshift 头插-
- 在数组前面添加 1 ~ n 个数据 ( 1 ~ n 个参数 )
- 返回值:添加数据后的
length
- 会改变原数组
const arr = [1, 2, 3];
const result = arr.unshift(0);
console.log(result); // 4
console.log(arr); // [0, 1, 2, 3]
push 尾插-
- 用于在数组末尾追加 1 ~ n 个数据 ( 1 ~ n 个参数 )
- 返回值:添加数据后的
length
- 会改变原数组
const arr = [1, 2, 3];
const result = arr.push(0);
console.log(result); // 4
console.log(arr); // [1, 2, 3, 0]
shift 头删-
- 用于删除数组的第一个数据 ( 无参数 )
- 返回值:被删除的数据
- 会改变原数组
const arr = [1, 2, 3];
const result = arr.shift();
console.log(result); // 1
console.log(arr); // [2, 3]
pop 尾删-
- 用于删除数组最后一个数据 ( 无参数 )
- 返回值:被删除的数据
- 会改变原数组
const arr = [1, 2, 3];
const result = arr.pop();
console.log(result); // 3
console.log(arr); // [1, 2]
splice 移接-
- 用于移除、拼接数组 ( 0 ~ n 个参数 )
- 返回值:移除的子数组
- 会改变原数组,新数组 = 原数组 - 移除的数据 + 拼接的数据
arr.splice(index, count, item, ...)
index
:开始修改的下标,默认为 length。可以为负数,负数 → length + 负数count
:移除的数量item
:拼接的数据
移除 ( 0 ~ 2 个参数 )
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.splice(); // 无参数
console.log(arr1); // [1, 2, 3, 4, 5, 6]
console.log(result); // []
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.splice(2); // 1 个参数:从下标 2 开始移除
console.log(arr1); // [1, 2]
console.log(result); // [3, 4, 5, 6]
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.splice(2, 3); // 2 个参数:从下标 2 开始,移除接着的 3 个元素
console.log(result); // [3, 4, 5]
console.log(arr1); // [1, 2, 6]
删除最后三个数据:
const arr1 = [1, 2, 3, 4, 5, 6]; // length = 6
const result = arr1.splice(-3); // -3 → 6 - 3
console.log(result); // [4, 5, 6]
console.log(arr1); // [1, 2, 3]
拼接 ( 3 ~ n 个参数 )
第 3 个及以上的参数:添加的数据
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.splice(2, 2, 100); // 从下标 2 开始,移除接着的 2 个元素,拼接数据 100
console.log(result); // [3, 4]
console.log(arr1); // [1, 2, 100, 5, 6]
如果不移除数据,就相当于插入
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.splice(2, 0, 100, 200); // 在下标 2 的位置插入数据 100、200
console.log(result); // []
console.log(arr1); // [1, 2, 100, 200, 3, 4, 5, 6]
reverse 倒序-
- 用于颠倒数组排序 ( 无参数 )
- 返回值:逆序后的数组
- 会改变原数组
const arr1 = [1, 2, 3, 4, 5, 6];
const result = arr1.reverse();
console.log(result); // [6, 5, 4, 3, 2, 1]
console.log(arr1); // [6, 5, 4, 3, 2, 1]
sort 排序-
- 用于对数组进行排序 ( 0 ~ 1 个参数 )
- 返回值:排序后的数组
- 会改变原数组
sort 函数默认按照 ASCII 码,从小到大排序,会隐式地将数据转换为 String 后,再进行排序。
const arr1 = [1, 5, 9, 13, 24, 36];
const result = arr1.sort(); // 无参数:默认排序
console.log(result); // [1, 13, 24, 36, 5, 9]
console.log(arr1); // [1, 13, 24, 36, 5, 9]
sort 接收一个回调函数作为参数,以配置排序的方式:
const arr = [2, 3, 57, 10, 12, 34];
console.log(arr); // [2, 3, 57, 10, 12, 34]
// 让数组按照数字从小到大排列
arr.sort((a, b) => a - b);
console.log(arr); // [2, 3, 10, 12, 34, 57]
// 让数组按照数字从大到小排列
arr.sort((a, b) => b - a);
console.log(arr); // [57, 34, 12, 10, 3, 2]
// 数组随机排列
arr.sort((a, b) => Math.random() - 0.5);
console.log(arr); // [57, 34, 10, 12, 3, 2]
concat 合并*
- 用于 1 ~ n 个数组的合并 ( 1 ~ n 个参数 )
- 返回值:合并后的数组
- 不会改变原数组
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const arr3 = [6, 7];
const newArr = arr1.concat(arr2, arr3);
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [4, 5]
console.log(arr3); // [6, 7]
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7]
concat 的参数非常灵活,可以是数组 / 数字:
const arr1 = [1, 2, 3];
console.log(arr1); // [1, 2, 3]
arr1 = arr1.concat([4, 5], 6); // 重新给 arr1 赋值
console.log(arr1); // [1, 2, 3, 4, 5, 6]
slice 切片*
slice(start, end)
用于切取指定数组元素 ( 0 ~ 2 个参数 )
start
-开始切取的下标,默认为0
(包括)
end
-结束切取的下标,默认为length
(不包括)- 返回值:切取出来的子数组
- 不会改变原数组
const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = arr1.slice(2); // 1 个参数:从下标 2 开始截取
console.log(arr2); // [3, 4, 5, 6]
const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = arr1.slice(2, 5); // 2 个参数:截取下标在 [2, 5) 内的数据
console.log(arr2); // [3, 4, 5]
通过 slice 复制一份数组:
const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = arr1.slice(); // 无参数:从 0 开始截取
console.log(arr2); // [1, 2, 3, 4, 5, 6]
如果第 2 个参数 < 第 1 个参数,则返回空数组
const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = arr1.slice(4, 2);
console.log(arr2); // []
参数可以为负数,负数 → length + 负数
const arr1 = [1, 2, 3, 4, 5, 6]; // length = 6
const arr2 = arr1.slice(-3, -1);
console.log(arr2); // [4, 5]
const arr2 = arr1.slice(3, 5);
console.log(arr2); // [4, 5]
indexOf 寻址*
- 从前往后查找指定数据第 1 次出现的位置 ( 1 ~ 2 个参数 )
- 找到,则返回该数据的
下标
;找不到,则返回-1
第 1 个参数:查找的元素
第 2 个参数:开始查找的下标
const arr = [1, 2, 3, 4, 5, 3];
const result = arr.indexOf(3); // 1 个参数:在数组中查找 3 第一次出现的位置
console.log(result); // 2
const arr = [1, 2, 3, 4, 5];
const result = arr.indexOf(3, 3); // 2 个参数:从索引为 3 的位置,往后查找 3 第一次出现的位置
console.log(result); // -1
lastIndexOf 寻址*
- 从后向前查找指定数据第 1 次出现的位置 ( 1 ~ 2 个参数 )
- 找到,则返回该数据的
下标
;找不到,则返回-1
第 1 个参数:查找的元素
第 2 个参数:开始查找的下标
const arr = [1, 2, 3, 4, 5, 3];
const result = arr.lastIndexOf(3); // 1 个参数:在数组中查找 3 第一次出现的位置
console.log(result); // 5
const arr = [1, 2, 4, 5, 3];
const result = arr.lastIndexOf(3, 3); // 2 个参数:从索引为 3 的位置,往前查找 3 第一次出现的位置
console.log(result); // -1
练一练:
// 把所有的 3 改为 6
const arr = [1, 2, 3, 4, 5, 3];
console.log(arr); // [1, 2, 3, 4, 5, 3]
const index = 0;
while (index != -1) {
index = arr.indexOf(3);
if (index != -1) {
arr[index] = 6;
}
}
console.log(arr); // [1, 2, 6, 4, 5, 6]
// 去重
const arr = [1, 2, 3, 5, 4, 5, 3];
console.log(arr); // [1, 2, 3, 5, 4, 5, 3]
for (let index = 0; index < arr.length; index++) {
const element = arr[index];
const lastIndex = arr.lastIndexOf(element);
if (index != lastIndex) {
arr.splice(lastIndex, 1); // 删除重复项
}
}
console.log(arr); // [1, 2, 4, 5, 3]
join 拼接
- 指定连接符,把数组的各项拼接成字符串 ( 0 ~ 1 个参数 )
- 返回值:拼接后的字符串
- 不会改变原数组
const arr = [1, 2, 3, 4, 5];
const str = arr.join('-');
console.log(arr); // [1, 2, 3, 4, 5]
console.log(str); // 1-2-3-4-5
- join 方法的连接符默认为
,
- 无参数的 join 方法,等效于 toString 方法:
const arr = [1, 2, 3, 4, 5];
const str1 = arr.join(); // 无参数:默认使用 , 拼接
const str2 = arr.toString();
console.log(arr); // [1, 2, 3, 4, 5]
console.log(str1); // 1,2,3,4,5
console.log(str2); // 1,2,3,4,5
相关知识: