如下是对 JavaScript 操作数组和字符串的方法的汇总
数组
数组的常用方法
操作方法
数组基本操作可以归纳为增、删、改、查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会
下面是对数组常用的操作方法做一个归纳
增
下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影响
- push()
- unshift()
- splice()
- concat()
push()
push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度
let colors = [] // 创建一个数组 let count = colors.push("res", "green") // 推入两项 console.log(count) // 2
unshift()
unshift()在数组开头添加任意多个值,然后返回新的数组长度
let colors = new Array() // 创建一个数组 let count = colors.unshift("red", "green") // 从数组开头推入两项 alert(count) // 2
splice()
splice() 是 JavaScript 数组的一个原生方法,用于在数组中插入、删除或替换元素。这个方法可以接收多个参数,其中前两个参数是必需的。
🗨️第一个参数,要操作的起始位置,也就是从哪个下标开始进行插入、删除或替换。
🗨️第二个参数,要删除的元素数量,如果为 0,则表示不删除任何元素,只进行插入操作。
🗨️第三个参数及以后,要插入到数组中的新元素,可以插入任意数量的元素。
删除元素
如果想从数组中删除元素,可以将第二个参数设为要删除的元素数量,而后面不传其他的插入元素:
const arr = [1, 2, 3, 4, 5]; arr.splice(2, 2); // 从下标为 2 的位置开始,删除两个元素 console.log(arr); // 输出:[1, 2, 5]
splice(2, 2) 表示从下标为 2 的位置开始,删除 2 个元素(即删除下标为 2 和 3 的元素),最终数组变成了 [1, 2, 5]。
插入元素
如果想向数组中插入新的元素,可以将第二个参数设为 0,然后在后面传入要插入的元素:
const arr = [1, 2, 3, 4, 5]; arr.splice(2, 0, 'a', 'b', 'c'); // 从下标为 2 的位置开始,插入三个元素 console.log(arr); // 输出:[1, 2, "a", "b", "c", 3, 4, 5]
splice(2, 0, ‘a’, ‘b’, ‘c’) 表示从下标为 2 的位置开始,删除 0 个元素,并插入三个元素(即插入 ‘a’、‘b’ 和 ‘c’),最终数组变成了 [1, 2, “a”, “b”, “c”, 3, 4, 5]。
替换元素
如果想替换数组中的某个元素,可以将第二个参数设为 1,并在后面传入要替换的新元素:
const arr = [1, 2, 3, 4, 5]; arr.splice(2, 1, 'a', 'b'); // 从下标为 2 的位置开始,删除一个元素,插入两个新元素 console.log(arr); // 输出:[1, 2, "a", "b", 4, 5]
splice(2, 1, ‘a’, ‘b’) 表示从下标为 2 的位置开始,删除 1 个元素(也就是删除下标为 2 的元素 3),并插入两个新元素 ‘a’ 和 ‘b’,最终数组变成了 [1, 2, “a”, “b”, 4, 5]。
concat()
concat()方法是JavaScript数组的一个内置方法,用于合并两个或多个数组。当调用concat()方法时,它会创建原始数组的一个副本,并将指定的参数数组连接到副本的末尾。这样做不会改变原始数组,而是返回一个新的合并后的数组。
我们来检验一下它的语法
const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const newArray = array1.concat(array2); console.log(newArray); // 输出: [1, 2, 3, 4, 5, 6] console.log(array1); // 输出: [1, 2, 3],原始数组没有改变 console.log(array2); // 输出: [4, 5, 6],原始数组没有改变
如上所示,通过调用concat()方法,我们创建了一个新数组newArray,它包含了array1和array2的合并结果。原始数组array1和array2保持不变。
当使用concat()方法时,可以传递一个或多个数组作为参数
// 合并两个数组 const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const newArray = array1.concat(array2); console.log(newArray); // 输出: [1, 2, 3, 4, 5, 6] // 合并三个数组 const array3 = [7, 8, 9]; const newArray2 = array1.concat(array2, array3); console.log(newArray2); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9] // 合并空数组 const emptyArray = []; const newArray3 = array1.concat(emptyArray); console.log(newArray3); // 输出: [1, 2, 3] // 合并字符串和数组 const array4 = ['a', 'b', 'c']; const newArray4 = array1.concat(array4, 'd'); console.log(newArray4); // 输出: [1, 2, 3, 'a', 'b', 'c', 'd']
我们使用了concat()方法将多个数组合并成一个新数组。注意,传递给concat()方法的参数可以是数组,也可以是其他类型的值。在最后,我们将字符串和数组一起传递给concat()方法,新数组中包含了原始数组的元素以及额外的字符串。
咱继续看一个复杂的
const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const array3 = [7, 8, 9]; const nestedArray = [array1, array2]; const newArray = array1.concat(array2, array3, ['a', 'b'], ...nestedArray); console.log(newArray); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', [1, 2, 3], [4, 5, 6]]
咱们定义了三个数组array1、array2和array3。然后,咱们创建了一个嵌套数组nestedArray,它包含了array1和array2作为元素。
接下来,咱们使用concat()方法将多个数组合并成一个新数组。除了传递array1、array2和array3之外,咱们还传递了一个包含字符串数组[‘a’, ‘b’],以及使用扩展运算符(…)展开的nestedArray。
最终,新数组newArray包含了原始数组的所有元素,以及额外的字符串和嵌套数组。注意,嵌套数组没有展开,而是保留了原始的形式。
删
下面前三种都会影响原数组,最后一项不影响原数组:
- pop()
- shift()
- splice()
- slice()
pop()
pop()方法用于删除数组的最后一项,同时减少数组的length值,返回被删除的项
const array1 = [1, 2, 3]; const lastItem = array1.pop(); // 删除最后一项,并返回被删除的项 console.log(lastItem); // 输出: 3 console.log(array1); // 输出: [1, 2]
如上所示,咱们定义了一个数组array1,并调用pop()方法来删除最后一项。pop()方法返回被删除的项3,原始数组变成了[1, 2]。
需要注意的是,pop()方法不仅会删除最后一项,还会更改数组的长度值。同时,当原始数组为空数组时,调用pop()方法将返回undefined,并且不会更改数组的长度。
shift()
shift()方法是JavaScript数组的另一个内置方法,它用于从数组的开头删除第一项,并返回被删除的项。
const array1 = [1, 2, 3]; const firstItem = array1.shift(); // 删除第一项,并返回被删除的项 console.log(firstItem); // 输出: 1 console.log(array1); // 输出: [2, 3]
如上定义了一个数组array1,并调用shift()方法来删除第一项。shift()方法返回被删除的项1,原始数组变成了[2, 3]。
需要注意的是,shift()方法不仅会删除第一项,还会更改数组的长度值。同时,当原始数组为空数组时,调用shift()方法将返回undefined,并且不会更改数组的长度。
splice()
前面我们已经讲过其删的用法了,这里简单描述一下:传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组
let colors = ["red", "green", "blue"] let removed = colors.splice(0, 1) // 删除第一项 console.log(colors) // green, blue console.log(remove) // red,只有一个元素的数组
slice()
slice()方法是JavaScript数组的一个内置方法,用于创建一个包含原有数组中一个或多个元素的新数组,而不会影响原始数组。
const array1 = [1, 2, 3, 4, 5]; const newArray = array1.slice(1, 4); console.log(newArray); // 输出: [2, 3, 4] console.log(array1); // 输出: [1, 2, 3, 4, 5]
如上代码,我们定义了一个数组array1。然后,我们调用slice()方法,并传入索引参数1和4,这表示我们想要提取从索引1(包括)到索引4(不包括)之间的元素。
slice()方法返回一个新数组newArray,其中包含了原始数组中指定索引范围内的元素[2, 3, 4]。原始数组array1保持不变,仍然是[1, 2, 3, 4, 5]。
我们可以看到,slice()方法不会修改原始数组,并且可以接受两个可选的参数,用于指定开始和结束提取的索引位置。
注意:如果只传入一个参数,则提取从该索引开始到数组末尾的所有元素。如果未传入任何参数,则提取整个数组的副本。
最后,我们来看看slice的妙用
- 复制一个数组
我们使用slice()方法而没有传入任何参数,从而创建了原始数组originalArray的一个副本copiedArray。
const originalArray = [1, 2, 3, 4, 5]; const copiedArray = originalArray.slice(); console.log(copiedArray); // 输出: [1, 2, 3, 4, 5]
- 截取数组的最后几个元素
我们使用slice()方法传入负数索引-3,这样可以截取数组array1中的最后三个元素。
const array1 = [1, 2, 3, 4, 5]; const lastThreeItems = array1.slice(-3); console.log(lastThreeItems); // 输出: [3, 4, 5]
- 删除数组中的特定元素:
我们使用slice()方法两次来删除数组array1中的第三个元素。首先,我们使用slice(0, 2)来获取索引0到索引2之间的元素(不包括索引2),然后使用concat()方法将其与索引大于2的元素连接起来,从而得到一个新数组newArray。
const array1 = [1, 2, 3, 4, 5]; const newArray = array1.slice(0, 2).concat(array1.slice(3)); console.log(newArray); // 输出: [1, 2, 4, 5]
- 分页功能:
我们可以根据每页显示的条目数和当前页码使用slice()方法来实现分页功能。首先,我们计算当前页的起始索引startIndex和终止索引endIndex,然后使用这些索引来截取原始数组中对应页码的元素。
const itemsPerPage = 10; // 每页显示的条目数 const currentPage = 2; // 当前页码 const startIndex = (currentPage - 1) * itemsPerPage; const endIndex = startIndex + itemsPerPage; const paginatedItems = originalArray.slice(startIndex, endIndex); console.log(paginatedItems); // 输出:当前页码上的条目
- 倒序排列:
我们首先使用slice()方法创建了原始数组array1的一个副本,然后调用reverse()方法对副本进行倒序排列。
const array1 = [1, 2, 3, 4, 5]; const reversedArray = array1.slice().reverse(); console.log(reversedArray); // 输出: [5, 4, 3, 2, 1]
- 数组元素的随机抽样:
我们使用slice()方法和sort()方法来实现数组元素的随机抽样。首先,我们使用slice()方法创建了原始数组array1的一个副本,然后使用sort()方法和随机数来对副本进行洗牌。最后,使用slice()方法截取洗牌后的数组中的前几个元素作为抽样结果。
const array1 = [1, 2, 3, 4, 5]; const sampleSize = 3; // 抽样的大小 const shuffledArray = array1 .slice() .sort(() => 0.5 - Math.random()) .slice(0, sampleSize); console.log(shuffledArray); // 输出: 随机抽样的元素数组
改
修改原来数组的内容,常用的是 splice,前面我们已经详细介绍过了,现在简单描述一下语法:
传入三个参数,分别是开始位置,要删除元素的数量,要插入的任意多个元素,返回删除元素的数组,对原数组产生影响
let colors = ["red", "green", "blue"] let removed = colors.splice(1, 1, "red", "purple") // 插入两个值,删除一个元素 console.log(colors) // red, red, purple, blue console.log(removed) // green, 只有一个元素的数组
查
也即查找元素,返回元素坐标或者元素值
- indexOf()
- includes()
- find()
indexOf()
返回要查找的元素在数组中的位置,如果没找到则返回 -1
我们首先创建了一个数组array。然后,我们使用indexOf()方法来查找数字3在数组中的位置,结果为2(索引从0开始)。接着,我们使用indexOf()方法查找数字6在数组中的位置,由于数组中没有数字6,所以返回-1。
需要注意的是,indexOf()方法只会返回第一个匹配项的索引。如果要查找所有匹配项的索引,可以使用循环结合indexOf()方法进行遍历。此外,indexOf()方法还可以接收第二个参数,表示搜索的起始位置。
const array = [1, 2, 3, 3, 5]; console.log(array.indexOf(3)); // 输出: 2 console.log(array.indexOf(6)); // 输出: -1