你知道Javascript中的数组方法总共有多少个吗?41个哦! 最近有点时间,就跟着mdn的api一个个复习了一下,真的是很惊艳!自己总结了一下,做个记录吧!
1. Array.prototype.pop()
返回值
- 从数组中删除 最后一个元素,并返回该元素的值,当数组为空时返回undefined
- 此方法会修改数组长度
const arr = [1, 2, 3, 5];
const popped = arr.pop();
console.log(arr);
// [1, 2, 3]
console.log(popped);
// 5
2. Array.prototype.shift()
返回值
- 从数组中删除 第一个元素,并返回该元素的值,当数组为空时返回undefined
- 此方法会修改数组长度
const arr = [1, 2, 3, 5];
const shifted = arr.shift();
console.log(arr);
// [2, 3, 5]
console.log(shifted);
// 1
3. Array.prototype.push()
返回值
- 将指定元素添加 到 数组末尾,并返回新的数组长度
- 此方法会修改数组长度
const arr = [1, 2, 3, 5];
const pushed = arr.push(4);
console.log(arr);
// [1, 2, 3, 5, 4]
console.log(pushed);
// 5
4. Array.prototype.unshift()
返回值
- 将指定元素添加 到 数组头部,并返回新的数组长度
- 此方法会修改数组长度
const arr = [1, 2, 3, 5];
const unshifted = arr.unshift(4);
console.log(arr);
// [4, 1, 2, 3, 5]
console.log(pushed);
// 5
5. Array.prototype.slice(start?, end?)
返回值
- 返回一个新数组,是一个由start和end决定的原数组的浅拷贝(包括start,不包括end),原始数组不改变
- 对于稀疏数组,会保留空槽
语法
slice()
slice(start)
slice(start, end)
const arr = [1, 2, 3, , 5];
const sliced1 = arr.slice();
const sliced2 = arr.slice(1);
const sliced3 = arr.slice(2, 4);
// arr: [1, 2, 3, , 5]
// sliced1: [1, 2, 3, , 5]
// sliced2: [2, 3, , 5]
// sliced3: [3, ]
6. Array.prototype.splice()
返回值
- 通过移除或替换已存在的元素和/或添加新元素
就地
改变一个数组 - 返回一个包含了
删除
元素的数组- 如只移除一个元素,则返回一个元素的数组
- 如没有删除任何元素,则返回一个空数组
- 如删除的部分是稀疏的,则返回的数组也是稀疏的
语法
splice(start?)
splice(start, deleteCount?)
splice(start, deleteCount?, item1?)
splice(start, deleteCount?, item1?, item2?, itemN?)
- start:从0开始计算的索引
- 如start < 0,使用start + array.length
- 如start < -array.length, 则使用0
- 如start > array.lenght,不会删除任何元素,但会表现为添加元素的函数,添加所提供的那些元素
- 如start被省略,不会删除任何元素。 传undefined会被转化为0
- deleteCount(可选):整数,表示数组中要从start开始阐述的元素数量
- 省略deleteCount或deleteCount >= array.length - start,则从start到数组末尾的所有元素将被删除
- deleteCount <= 0,不删除任何元素,这种情况下,应至少指定一个新元素
- item1,...,itemN(可选)
- 从start开始要加入到数组中的元素
- 如不指定任何元素,splice()将只从数组中删除元素
const arr = [1, 2, 3, 5];
const spliced1 = arr.splice(1);
// arr: [1]
// spliced1: [2, 3, 5]
const spliced2 = spliced1.splice(1, 0, 8);
// spliced1: [2, 8, 3, 5]
// spliced2: []
const spliced3 = spliced1.splice(2, 1);
// spliced1: [2, 8, 5]
// spliced3: [3]
7. Array.prototype.toSpliced()
返回值
- 是splice()的复制方法,返回一个新数组,并在给定索引处删除和/或替换元素
- 不返回已删除的元素,返回一个新数组,该新数组由
start
之前的所有元素、item1
、item2
、...、itemN
,以及start + deleteCount
之后的所有元素组成 - 不产生稀疏数组,如果原始数组是稀疏的,新数组中空槽会被替换成undefined
语法
语法与splice()方法一样
const arr = [1, 2, 3, 5];
const toSpliced1 = arr.toSpliced(1);
// arr: [1, 2, 3, 5]
// spliced1: [1]
const toSpliced2 = arr.toSpliced(1, 0, 8);
// toSpliced2: [2, 8, 3, 5]
const toSpliced3 = arr.toSpliced(2, 1);
// toSpliced3: [1, 2, 5]
8. Array.prototype.concat()
返回值
- 不更改原数组,返回新数组,新数组将首先由调用它的对象中的元素填充
- 用于合并两个或多个数组
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];
const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
9. Array.prototype.copyWithin()
返回值
- 浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度
语法
copyWithin(target)
copyWithin(target, start)
copyWithin(target, start, end)
- target:序列开始替换的目标位置,以0为起始的下标表示,且将被转换为整数
- target < 0,则实际的目标位置是:target + array.length
- target < -array.length, 则实际的目标位置为0
- target > array.length, 则不会拷贝任何内容
- target > start, 则复制只会持续到array.length结束(copyWithin()永远不会扩展数组)
- start(可选):要复制的元素序列的起始位置,以0为其实的下标
- start < 0,则实际的起始位置是:start + array.length
- start < -array.length, 则实际的起始位置为0
- target > array.length, 则不会拷贝任何内容
- end(可选):要复制的元素序列的结束位置,以0为起始的下标。copyWithin()将会拷贝到该位置,但不包括
end
这个位置的元素- end < 0,则实际的结束位置是:end + array.length
- end < -array.length, 则实际的结束位置为0
- 如省略end或end >= array.length, 则实际的结束位置默认为array.length,这会导致知道数组末尾的所有元素都会被复制
- end < start,则不会拷贝任何内容
console.log([1, 2, 3, 4, 5].copyWithin(-2));
// [1, 2, 3, 1, 2]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3));
// [4, 5, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4));
// [4, 2, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(-2, -3, -1));
// [1, 2, 3, 3, 4]