【JavaScript】数组实例方法 (ES5)


标有 - 表示会改变原数组;标有 * 表示字符串也有同名方法


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, ...)
  1. index:开始修改的下标,默认为 length。可以为负数,负数 → length + 负数
  2. count:移除的数量
  3. 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



相关知识:

  1. 【JavaScript】数组简介
  2. 【JavaScript】高阶数组实例方法 (ES5)
  3. 【JavaScript】数组方法 (ES6)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JS.Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值