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
目录
相关文章
|
17天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
29天前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
2天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
|
16天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
16天前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
4天前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
|
16天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
34 7
|
17天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
22天前
|
JavaScript 前端开发 Go
异步加载 JS 的方法
【10月更文挑战第24天】异步加载 JavaScript 是提高网页性能和用户体验的重要手段。通过使用不同的方法和技术,可以实现灵活、高效的异步加载 JavaScript。在实际应用中,需要根据具体情况选择合适的方法,并注意处理可能出现的问题,以确保网页能够正常加载和执行。
|
1月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。