JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(一)

简介: JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(一)

如下是对 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的妙用

  1. 复制一个数组

我们使用slice()方法而没有传入任何参数,从而创建了原始数组originalArray的一个副本copiedArray。

const originalArray = [1, 2, 3, 4, 5];
const copiedArray = originalArray.slice();
console.log(copiedArray); // 输出: [1, 2, 3, 4, 5]
  1. 截取数组的最后几个元素

我们使用slice()方法传入负数索引-3,这样可以截取数组array1中的最后三个元素。

const array1 = [1, 2, 3, 4, 5];
const lastThreeItems = array1.slice(-3);
console.log(lastThreeItems); // 输出: [3, 4, 5]
  1. 删除数组中的特定元素:

我们使用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]
  1. 分页功能:

我们可以根据每页显示的条目数和当前页码使用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); // 输出:当前页码上的条目
  1. 倒序排列:

我们首先使用slice()方法创建了原始数组array1的一个副本,然后调用reverse()方法对副本进行倒序排列。

const array1 = [1, 2, 3, 4, 5];
const reversedArray = array1.slice().reverse();
console.log(reversedArray); // 输出: [5, 4, 3, 2, 1]
  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
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(二):https://developer.aliyun.com/article/1556672
目录
相关文章
|
1月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
163 69
|
11天前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
72 0
|
12天前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
74 23
|
4月前
|
前端开发 JavaScript
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
130 58
|
2月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
3月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
3月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~