Array数组常用方法总结(javascript版)

不改变原数组的方法

1. concat()‌
合并数组,返回一个新数组,原数组不变。
语法:array1.concat(array2[, array3[,...,arrayX]])
['a'].concat(['b'],['c']) // 原数组不变,return [a,b,c]

2. slice()🌟
slice译为切片,提取数组的一部分,返回一个新的数组,原数组不变。
语法:slice([start[, end]]),start可选,默认0,end可选,默认最大索引。
['a','b','c'].slice(1, 2) // 原数组不变,return 切片数组['b']

3. forEach()‌
‌遍历数组,无返回值。
语法:array.forEach(function(currentValue[, index[, arr]]), [thisValue])。thisValue可选,对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
如果省略了 thisValue ,“this” 的值为 “undefined”

4. map()‌——ES6
遍历数组,返回一个新数组。
语法:array.map(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。

5. filter()‌——ES6
筛选数组,返回符合条件的元素组成的新数组。
语法:array.filter(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。

6. find()‌——ES6
找到第一个符合条件的元素。若没有找到,返回undefined。
语法:array.find(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。
7. findIndex()‌——ES6
找到第一个符合条件的元素的下标。若没有找到,返回-1。
语法:array.findIndex(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。
8. some()‌——ES6
判断数组中是否有元素满足条件。
语法:array.some(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。
9. every()‌——ES6
判断数组中是否有元素满足条件。
语法:array.every(function(currentValue[, index[, arr]]), [thisValue]),thisValue可选。
10. includes()‌——ES6
判断数组中是否包含某个元素。
‌数组‌语法:array.includes(element[, start])
‌字符串‌语法:string.includes(substring, start)
只能搜索基本元素,不能搜索对象等复杂类型,搜索对象要用find、some等。
['a','b','c'].includes('c') // true
[{a:1}].includes({a:1}) // false
11. indexOf()‌
‌查找元素在数组中第一次出现的位置。
语法:array.indexOf(item[, start])
只能搜索基本元素。
['a','b','c'].indexOf('c') // 2
[{a:1}].indexOf({a:1}) // -1
12. lastIndexOf()‌
查找元素在数组中的最后一个位置。
语法:array.indexOf(item[, start]),item是要找的元素(只能搜索基本元素),start是从哪个索引开始找,可选,默认0。
['c','a','b','c'].lastIndexOf('c') // 3
[{a:1}].lastIndexOf({a:1}) // -1

13. join()‌
‌将数组元素连接成一个字符串。
语法:array.join([separator]),separator可选,默认逗号。
[111,222].join() // '111,222'
[{a:1},3].join() // "[object Object],3"
['a','b','c'].join('、') // 原数组不变,return 'a、b、c'
14. toString()‌
‌将数组转换为字符串。
语法:array.toString()
效果等于array.join()

15. Array.isArray()‌
‌判断一个对象是否是数组。
语法:Array.isArray(array)‌

16. keys()‌——ES6
返回键的迭代器。
语法‌:array.keys()
Object.keys([111,222]) // ["0", "1"]
[111,222].keys() // Array Iterator[0,1]
17. values()‌——ES6
返回值的迭代器。
语法‌:array.values()
[111,222].values() // Array Iterator[111,222]
18. entries()‌——ES6
‌返回数组的键值对迭代器‌。
语法‌:array.entries()
[111,222].entries() // Array Iterator[[0, 111],[1, 222]]
可用于遍历二维数组、排序等。

怎么遍历迭代器‌?🌟

  1. for…of循环
  2. next()
    iterator.next()返回一个对象,对于有元素的数组,是{value: item1, done: false}。next.done用于指示迭代器是否完成,每次迭代时更新且为false,直到迭代器结束时为true。
const iterator = [111,222].entries();
// iterator类似于[{value: 111, done: false}, {value: 222, done: false}, {value: undefined, done: true}]
for(let item of iterator) {...
}
let entry = iterator.next();
while (!entry.done) {console.log(entry.value); //打印111=>打印222entry = iterator.next();
}

19. reduce()🌟——ES6
用于将一个数组中的值逐个累加或处理,最后获得一个单一的值。使用场景:数组求和、二维数组转一维、数组去重、按属性分类、替代filter和map等。
语法:arr.reduce(callback, [initialValue])

  • callback
    • 参数
      • previousValue:上次回调返回的值 / 初始值
      • currentValue:当前元素值
      • currentIndex:当前索引
      • array:调用reduce的数组
    • 返回值
      • 上一次回调的返回值将作为下一次回调的previousValue
      • 一定要记得return,否则下一次回调的previousValue就变成undefined了
  • initialValue
    • 第一次调用callback时,用initialValue作为previousValue。
    • 若不写initialValue,则callback从arr[1]开始,将arr[0]第一次的previousValue。

const sum = [1,2,3].reduce((prev,curr) => prev + curr, 0) // 原数组不变,return 1+2+3=6

20. reduceRight()🌟——ES6
反向的reduce()

21. Array.from()‌——ES6
arrayLike 转化成真数组。
参考:https://blog.csdn.net/JaxsonWang/article/details/101496076

Array.from({'0': 'a','1': 'b','2': 'c',length: 3
}) // ['a', 'b', 'c']
Array.from([1, 2, 3], item => item * item) // [1, 4, 9]

22. Array.of()‌——ES6
用于将一组值,转换为数组。
Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

23. flat()‌——ES6
将数组扁平化处理,返回一个新数组。
语法:array.flat([tierNum]),tierNum是要拉平数组的层数,默认一层。
[1, 2, [3, [4, 5]]].flat() // [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]

24. flatMap()‌——ES6
先把原数组map,再返回扁平化后的map的结果,原数组不变。
语法:array.flatMap(callback(currentValue[, index[, array]])[, thisArg])

let arr = [1, 2, 3, 4];arr.flatMap(item => [item, item * 2]); // return [1, 2, 3, 6, 4, 8]// 相当于arr.map(item => [item, item * 2]).flat();// [1, 2, 3, 4] => [[1, 2], [3, 6], [4, 8]] => [1, 2, 3, 6, 4, 8]

25. …——ES6
[...'hello'] // ["h", "e", "l", "l", "o"]
const [a, ...rest] = [1,2,3] // a=1,rest=[2,3]
const arr = [1, ...[2, 3]] // arr=[1, 2, 3]

改变原数组的方法

1. push()
从尾插入,返回新长度
['a'].push('b','c') // 原数组变成[a,b,c],return 3
2. pop()
从尾删除,返回被删除元素
['a','b','c'].pop() // 原数组变成[a,b],return c
3. unshift()
从头插入,返回新长度
['c'].unshift('a','b') // 原数组变成[a,b,c],return 3
4. shift()
从头删除,返回被删除元素
['a','b','c'].shift() // 原数组变成['b','c'],return 'a'

5. reverse()
颠倒数组中元素的顺序。
语法:array.reverse()
['a','b','c'].reverse() // 原数组变成['c','b','a'],return ['c','b','a']

6. fill()——ES6
将一个固定值替换数组的元素。
语法:array.fill(value[, start[, end]])
['a','b','c'].reverse() // 原数组变成['c','b','a'],return ['c','b','a']

7. splice()🌟
splice译为拼接,添加、删除or替换数组元素,并返回切片数组。
语法:splice(start[, deleteCount[, item1,item2,,,]])
['a','c'].splice(1,0,'b') // 原数组变成[a,b,c],return 切片数组[]
['a','b','c'].splice(1) // 原数组变成[a],return 被删除的切片数组[b,c]
['a','b','c'].splice(1,1,'b2') // 原数组变成['a','b2','c'],return 被替换的切片数组[b]

8. sort()——ES6🌟
对数组的元素进行排序。
语法:array.sort([compareFuc])
sort(compareFuc),compareFuc可以用(a,b)=>return xx。若xx>0,则把b排在a前面,反之则把a排在b前面。(a,b)=>a-b则升序,(a,b)=>b-a则降序。
sort在数组小于10个元素时使用插入排序,数组更大时使用快速排序,对于在快速排序中产生的子数组也一样,小数组用插入排序,大数组用快速排序。
sort处理大量数据会比较慢。
[{name: 'a',age: 5},{name: 'b',age: 3},{name: 'c',age: 4}].sort() // 原数组变成排序后的数组,return 排序后的数组[{age: 3},{age: 4},{age: 5}]
[5,3,4].sort((a,b) => b-a) // 原数组变成排序后的数组,return 排序后的数组[5,4,3]

9. copyWithin()——ES6
‌将数组元素复制到数组中的另一个位置,覆盖现有值。
语法:array.copyWithin(target[, start[, end]]),复制索引start~索引end-1的切片数组(start默认0,end默认为arr.length),再从数组中的target索引处开始覆盖,直到超出数组原长度或切片数组贴完了。

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(2, 1); // 首先复制索引1到索引4的内容["Orange", "Apple", "Mango"],再将其从索引2开始覆盖,fruits变成["Banana", "Orange", "Orange", "Apple"]// 或fruits.copyWithin(0, 3, 4); // 首先复制索引3到索引4-1的内容["Mango"],再将其从索引0开始覆盖,fruits变成["Mango", "Orange", "Apple", "Mango"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43339.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

API 请求需要证书认证? 如何在 Postman 中正确配置和使用?

本文来介绍 Postman 提供的管理证书功能如何配置,要了解更多相关的知识,可访问 Postman 证书 模块。 管理客户端证书,点击对应的按钮,首先选择 SETTINGS ,然后选择 Certificate 选项卡,如图所示&#xff1…

强大的AI网站推荐(第四集)—— Gamma

网站:Gamma 号称:展示创意的新媒介 博主评价:快速展示创意,重点是展示,在几秒钟内快速生成幻灯片、网站、文档等内容 推荐指数:🌟🌟🌟🌟🌟&#x…

信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport

【题目链接】 ybt 1609:【例 4】Cats Transport 洛谷 CF311B Cats Transport 【题目考点】 1. 动态规划:斜率优化动规 【解题思路】 解法1:设a点的前缀和 输入的 d d d序列是从 d 2 d_2 d2​到 d n d_n dn​,共n-1个数字。人…

从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析

在5G技术的浪潮中,Sivers半导体推出了创新的毫米波无线产品,为通信行业带来高效、可靠的解决方案。这些产品支持从24GHz到71GHz的频率,覆盖许可与非许可频段,适应高速、低延迟的通信场景。 5G通信频段的一点事儿及Sivers毫米波射频…

LocalDateTime序列化总结

版权说明: 本文由CSDN博主keep丶原创,转载请保留此块内容在文首。 原文地址: https://blog.csdn.net/qq_38688267/article/details/146703276 文章目录 1.背景2.序列化介绍常见场景关键问题 3.总体方案4.各场景实现方式WEB接口EasyExcelMybat…

分享一个Pyside6实现web数据展示界面的效果图

今天又是有问题直接找DS的一天,每日一问,今天我的问题是“怎么将pyside6生成的界面转成web界面,使用python语言实现web界面”,等了一会,DS给我提供了两种方案,方案如下: 然后,让我们…

GAMMA数据处理(十)

今天向别人请教了一个问题,刚无意中搜索到了一模一样的问题 不知道这个怎么解决... ok 解决了 有一个GAMMA的命令可转换 但是很奇怪 完全对不上 转换出来的行列号 不知道为啥 再试试 是因为经纬度坐标的小数点位数 de as

[从零开始学习JAVA ] 深入多线程

前言: 当今软件开发领域中,多线程编程已成为一项至关重要的技能。然而,要编写出高效、可靠的多线程程序并不容易。多线程编程面临着许多挑战,如线程安全性、资源共享、死锁等问题。因此,对于初学者来说,深入…

【Python NetworkX】图结构 图绘制

【Python NetworkX】图结构 & 图绘制 1. 简介 & 安装1.1 简介1.2 安装1.3 导入 2. 图2.1 无向图2.2 有向图2.3 重边无向图2.4 重边有向图2.5 图属性 3. 节点3.1 添加节点3.2 移除节点3.3 节点属性3.4 检查节点状态 4. 边4.1 添加边4.2 移除边4.3 边属性4.4 检查边状态 …

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一个客户端工具。 crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 ctr -v 输出的是 containerd 的版本, crictl -v 输出的是当前 k8s 的版本&#x…

【湖北工业大学2025年ACM校赛(同步赛)】题解

比赛链接 A. 蚂蚁上树 题目大意 给定一棵 n n n 个结点的树,根结点为 1 1 1。每个 叶结点 都有一只蚂蚁,每过 1 1 1 秒钟,你可以选一些蚂蚁往其 父结点 走一步,但是要求任意两只蚂蚁都不能在同一个 非根结点 上。 问至少要…

CS2 DEMO导入blender(慢慢更新咯)

流程:cs2-sourcefilmmaker-blender 工具:cs2tools,cs2manager,blender,blender插件sourceio,source2viewer 导入sfm 工具界面 选择这个 sourceio插件 sourceIO其中新版本导入相机路径不见了&#xff0c…

一周学会Flask3 Python Web开发-SQLAlchemy数据迁移migrate

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 模型类(表)不是一成不变的,当你添加了新的模型类,或是在模型类中添加了新的字段,甚至是修改…

Postman CORS 测试完全指南:轻松模拟跨域请求,排查 CORS 相关问题

在使用 Postman 进行 API 测试时,通常不会遇到跨域问题,因为 Postman 是一个独立的客户端应用程序,不同于在浏览器中运行的 JavaScript 代码,它没有同源策略(SOP)的限制。跨域资源共享(CORS&…

【图像处理基石】什么是refocus?

1. Refocus 的定义 Refocus(重新对焦)是一种通过算法调整图像或视频焦点的技术,允许用户在拍摄后选择焦点,实现类似光场相机的“先拍照后对焦”效果。其核心是通过多视角信息或深度估计,生成不同焦平面的图像&#xff…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景:群里有小伙伴向我求助如何调用web service接口,趁着周末时间,给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?opgetSupportCityDataset, 此接口根据用户输入…

电子电气架构 --- 域控架构下,汽车连接器的挑战和变化

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

[MySQL] 库的操作 表的操作

1.库的操作 1.创建数据库 这里就是一个创建数据库的例子,框内的东西可以不填,因为有默认设置,而这些东西是什么呢? 2.字符集和校验规则 2.1查看字符集校验规则 show variables like ‘character_set_database’; show variable…

Let’s Encrypt 宣布推出短期证书与 IP 地址支持,推动 Web 安全迈向新高度

2025 年 1 月 16 日,全球领先的免费 SSL/TLS 证书颁发机构 Let’s Encrypt 正式宣布两项重大功能更新计划:推出六天有效期证书(Short-Lived Certificates)及支持以 IP 地址为主体的证书申请。两项功能将于 2025 年起陆续开放&…

十二、Cluster集群

目录 一、集群简介1、现状问题2、集群作用 二、集群结构设计1、集群存储设2、消息通信设计 三、Cluster集群三主三从结构搭建1、redis.conf配置文件可配置项2、配置集群3、链接集群4、命令客户端连接集群并使用 四、集群扩容1、添加节点2、槽位分配3、添加从节点 五、集群缩容1…