常用处理数组的方法

article/2025/10/12 2:48:36

常用处理数组的方法

一、Es5

1.Arr.map()
数组中的每个元素会执行一次回调函数,结果作为一个新的数组返回,不改变原数组
let arr = [1, 2, 3, 4, 5]
let newArr = arr.map(x => {return x*2 // 将数组的每一项乘以2
})
console.log(newArr) // [2, 4, 6, 8, 10] 返回新数组
2.Arr.forEach()
数组中的每个元素会执行一次回调函数,没有返回值,原数组会改变
let arr = [1, {num: 2}, '4', true, null]arr.forEach(x => { x && x.num && (x.num = 3)// x = 'aa'})console.log('==========(arr)========>>>', arr)// [1, {num: 3}, '4', true, null] 数组的值如果是引用类型就可以改变,比如num的值就改变了,基础类型不会改变// [1, {num: 2}, '4', true, null] 
3.Arr.filter()
此方法是将所有元素通过传入的函数进行判断,将满足条件的元素作为一个新的数组返回
let arr = [1, 2, 3, 4, 5]
let newArr = arr.filter(value => {return value >= 3 // 判断元素是否大于等于3
} )
console.log(newArr) // [3, 4, 5] 返回满足判断条件的所有值
4.Arr.every()
此方法是将所有元素通过传入的函数进行判断,返回一个布尔值,如果所有元素都满足判断条件,
则返回true,有一个不满足就返回false
let arr = [1, 2, 3, 4, 5]
arr.every( value => value < 4 ) // 判断结果返回false
arr.every( value => value < 6 ) // 判断结果返回true
5.Arr.some()
此方法是将所有元素通过传入的函数进行判断,返回一个布尔值,只要有一个元素满足判断条件,
就返回true,都不满足就返回才false
let arr = [1, 2, 3, 4, 5]
arr.every( value => value < 4 ) // 判断结果返回true
arr.every( value => value <0 ) // 判断结果返回false

二、Es6

1.new Set(Arr)

数组对象去重、数组去重

1)数组去重
let arr = [12,43,23,43,68,12]
let newArr = new Set(arr) // {12, 43, 23, 68} 输出结果是对象
let newArr1 = [...new Set(arr)] // [12, 43, 23, 68] 将对象展开放进数组里面,输出结果是个数组
2)数组对象去重
let arr = [{key: '01',value: '西施'}, {key: '02',value: '王昭君'}, {key: '03',value: '杨玉环'}, {key: '04',value: '貂蝉'}, {key: '01',value: '西施'}
]// 方法一:利用对象访问属性的方法,判断对象中是否存在key
let newArr = []
let obj = {}
arr.map((item,i)=>{/* 通过key来过滤 */if(!obj[arr[i].key]){ // 当obj对象没有obj[arr[i].key] 这一项时执行newArr.push(arr[i]) // 每循环一次,将当前项添加到新的数组obj[arr[i].key] = true // 取每一项的key的值作为键,添加到obj,并赋值为true}
})
console.log('obj:',obj) // {01: true, 02: true, 03: true, 04: true}
console.log('newArr',newArr) //去重成功 newArr(4)[{…}, {…}, {…}, {…}] // 其它方法:[添加链接描述](https://www.cnblogs.com/cyfeng/p/12175986.html)
2.Arr.concat() …

数组拼接

1)concat()方法
let arr1 = [1, 2, 3]
let arr2 = [4, 5]
let arr = arr1.concat(arr2) // [1, 2, 3, 4, 5]
2) ...  方法
let arr1 = [1, 2, 3]
let arr2 = [4, 5]
let arr = [...arr1, ...arr2] // [1, 2, 3, 4, 5]

3.Arr. findIndex()

找第一个符合条件的元素的下标,找到就返回元素的位置,找不到就返回-1。
let arr = [1, 2, 3, 4]
let newArr = arr.findIndex(item => item>4) // 没有大于4的元素,输出 -1
let newArr = arr.findIndex(item => item>2) // 第一大于2的元素是3,输出下标 2

4.Arr.find()

find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined。
let arr = [1, 2, 3,4] 
let newArr = arr.find(item => item>4) // 没有大于4的元素,输出 undefined
let newArr = arr.find(item => item>2) // 第一大于2的元素是3,输出该元素 3

参数拓展
find(),findIndex((item, index, arr) => {})
item:每次循环的当前元素。
index:每次循环的当前元素的索引。
arr:被查找的数组。

三、其它

1.Arr.push()
此方法是在数组的后面添加一个或多个元素,数组长度改变
let arr = [1, 2, 3, 4, 5]
arr.push(7,8) // [1, 2, 3, 4, 5, 7, 8]
2.Arr.pop()
此方法是在数组的后面删除一个或多个元素,数组长度改变
let arr = [1, 2, 3, 4, 5]
arr.pop() // [1, 2, 3, 4]
3.Arr.unshift()
此方法是在数组的前面添加一个或多个元素,数组长度改变
let arr = [1, 2, 3, 4, 5]
arr.unshift(6, 7) // [6, 7, 1, 2, 3, 4, 5]
4.Arr.shift()
此方法是在数组的前面删除一个或多个元素,数组长度改变
let arr = [1, 2, 3, 4, 5]
arr.shift() // [2, 3, 4, 5]
5.Arr.reduce()
此方法是所有元素调用传入的函数,返回值为最后函数处理的结果,传入的值必须是函数类型
let arr = [1, 2, 3, 4, 5]
let sum1 = arr.reduce((a, b) => a + b) // sum1 = 15  相当于累加的效果
let sum2 = arr.reduce((a, b) => a*b) // sum2 = 120  相当于累乘的效果// 与之相对应的还有一个 Array.reduceRight() 方法,区别是这个是从右向左操作的
6.Arr.isArray()
判断是不是数组,返回的是布尔值
7.Arr.splice(开始位置, 删除的个数,要替换成的元素)
数组增删改,返回修改后的原数组
let arr = [1, 2, 3, 4, 5];// 注释:在数组的2位置,删除0个元素,同时新增一个'hahh'元素
let arr1 = arr.splice(2, 0, 'haha') // [1, 2, 'haha', 3, 4, 5] // 注释:从数组的2位置起,删除三个元素
let arr2 = arr.splice(2, 3) //[1, 2] // 注释:在数组的2位置,删除一个元素,同时新增一个'haha'元素
let arr1 = arr.splice(2, 1, 'haha') // [1, 2, 'haha', 4, 5]

8.substring(str)、str.slice()

字符串截取、拼接

1)substring(str)
let phone="20200909111501"
let phone1 = `${phone.substring(0,4)}-${phone.substring(4,6)}-${phone.substring(6,8)} ${phone.substring(8,10)}:${phone.substring(10,12)}:${phone.substring(12,14)}`// 打印输出结果 2020-09-09 11:15:01
2)str.slice()
let str = '你个老六。'
let str1 = str.slice(0, 3)  // 你个老
let str2 = str.slice(3, 4)  // 六
let str3 = str.slice(3)  // 六。
let str4 = str.slice(3, str.length)  // 六。

9.str.split()

字符串转数组
// 注释:split方法用 | 将字符串切割成数组
let str = 'jpg|bmp|gif|ico|png'
console.log(str.split('|')) // ["jpg", "bmp", "gif", "ico", "png"]
10.Arr.toString() Arr.join()
数组转字符串
注意:字符串和数组的索引都是从0开始
let arr = [1, 2, 3, 4, 5]// 注释:直接通过toString()方法将数组拼成字符串
let str = arr.toString() // 12345// 注释:不传参数,类似于toString()方法
let str1 = arr.join('') // 12345// 注释:用逗号将数组拼成字符串(默认用逗号拼接)
let str2 = arr.join(',') // 1,2,3,4,5// 注释:用#号将数组拼成字符串
let str3 = arr.join('#') // 1#2#3#4#5

11.Arr.replace()

字符串替换
// 将首个"元"替换为"分" 
'280元元'.replace(/元/, "分")  // 输出 :'280分元'
// 将全部"元"替换为"分"
'280元元'.replace(/元/g, "分") // 输出: '280分分'

12. indexOf()

寻找是否有某个值。找到返回第一次出现的索引, 找不到-1
['1','2','3','4'].indexOf('0') // 输出 -1
['1','2','3','4'].indexOf('3') // 输出 2
[1, '9'].indexOf('1') // 输出 -1 

注意: indexOf()方法既比较数值又比较数值类型

13.jQuery 的 each() 方法(遍历数组和对象)

能遍历数组,也能遍历对象
function aa () {// var arr1 = {one:[1, 4, 3], two:[4, 6, 6], there:[7, 20, 9]}var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]$.each(arr1,(index,item)=>{console.log('index:',index)console.log('item:',item)})}aa()

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/TAPlMVEX.shtml

相关文章

JS数组常用方法整理(14种常用方法)

目录 1.增 1.1 push(): 1.2 unshift(): 2.删 2.1 pop(): 2.2 shift() 3.改&#xff08;增、删&#xff09;&#xff1a; 3.1 splice() 4.查 4.1 slice() 5.将数组转换为字符串&#xff1a; 5.1 toString() 5.2 join() 6.数组拼接 6.1concat() 7.检测数组中是否包…

总结: 数组常用的方法

在实际开发当中, 数组和对象使用到最多的; 数组和对象有很多的方法, 这里主要探讨一下: 数组的增删改查数组的排序方式数组转换成其他数据类型的方式ES6数组新增常用的迭代方式 为什么需要数组? 数组可以存入不限数的数据, 并且可以使用下标值进行访问; 数据在数组的内部是有…

hive 宽表变竖表 长表变宽表

1.这是源数据以及需要转化的目标表. 我们的方法是 , 用 GROUP BY按照year分组 , 并且依次提取1月,2月,3月,4月的 num,具体实现 1 2 3 4 5 6 select year, max(case when month1 then money else 0 end) as M1, max(case when month2 then money else 0 end) as M2, max(case w…

【pandas】变形(长宽表变换)

变形 长宽表的变形 长表变宽表就是一个分类变量的多个值展开成多个变量&#xff0c;和哑变量变换有点相似&#xff0c;但不是0-1编码而是其他变量的值。 宽表变长表类似&#xff0c;多个类别可以化在一个分类变量下。 pivot pivot是一种典型的长表变宽表的函数&#xff0c;…

数据库设计--大宽表

宽表的概念 基本概念 宽表从字面意义上讲就是字段比较多的数据库表。通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。 由于把不同的内容都放在同一张表存储&#xff0c;宽表已经不符合三范式的模型设计规范&#xff0c;随之带来的主要坏处就是数据的大量冗…

Flink cdc+ doris 大宽表实践~

还没整理好&#xff0c;别慌。 一&#xff0c;业务问题&#xff1a; 多个表关联join&#xff08;涉及时间维度跨度很长&#xff09;&#xff0c;几乎等同于全量关联&#xff0c;这个时候flink sql join没法做&#xff0c;因为state会无线增大&#xff0c;然后OOM。 二&#xf…

实现MySQL同步数据到ES构建宽表

作者介绍 Ceven&#xff0c;德勤乐融(北京)科技有限公司 邮箱&#xff1a;likailindeqinyuerong.com 前言 CloudCanal 近期提供了自定义代码构建宽表能力&#xff0c;我们第一时间参与了该特性内测&#xff0c;效果不错。开发流程详见官方文档 《CloudCanal自定义代码实时加…

宽表:数据仓库 - “宽表”之争?

昨天在技术交流群里一个问题引发了激烈的讨论&#xff0c;我决定把它记录下来。 问题如下&#xff1a;DWD 中有宽表么&#xff1f; 作为扫盲文章&#xff0c;基础知识我们再普及一下&#xff0c;先介绍下基础相关概念。 数仓分层&#xff08;来自&#xff1a;个人理解&#xff…

Elasticseach:从微服务架构演变到大宽表思维的架构转变

序言 图示&#xff1a;Elasticsearch 在DB-Engine综合排名第8 Elasticsearch 简称"ES”, 在DB-Engine 综合排名第8&#xff0c;已经持续了相当长的时间&#xff0c;按照当下热度应该会继续保持或者上升一个名次&#xff1b;ES在多数工程师印象中最深刻可能是ELK三件套或者…

9.Flink实时项目之订单宽表

1.需求分析 订单是统计分析的重要的对象&#xff0c;围绕订单有很多的维度统计需求&#xff0c;比如用户、地区、商品、品类、品牌等等。为了之后统计计算更加方便&#xff0c;减少大表之间的关联&#xff0c;所以在实时计算过程中将围绕订单的相关数据整合成为一张订单的宽表…

数仓建模—宽表的设计

宽表的设计 高内聚低耦合 宽表是数仓里面非常重要的一块&#xff0c;数仓是分层的&#xff0c;这是技术进步和时代变化相结合的产物&#xff0c;数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发。 宽表主要出现在dwd 层和报表层&#xff0c;当然有的人说dws 层也有…

基于宽表的数据建模应用

一、业务背景 1.1 数据建模现状 互联网企业往往存在多个产品线&#xff0c;每天源源不断产出大量数据&#xff0c;这些数据服务于数据分析师、业务上的产品经理、运营、数据开发人员等各角色。为了满足这些角色的各种需求&#xff0c;业界传统数仓常采用的是经典分层模型的数…

数据仓库宽表

1. 构建宽表的目的 讲宽表我想从为什么需要宽表入手&#xff0c;而不是一上来就抠概念。因为我觉得一门知识叫什么名字并不是最核心的&#xff0c;关键是搞清楚它的诞生背景以及如何在特定场景用好它。 构建宽表的目的很简单,就是为了"一站式"尽可能多的展示我们需要…

宽表, 窄表, 维度表, 事实表的区别

在数据开发里, 会涉及到一些概念: 宽表, 窄表, 维度表, 事实表 宽表: 把多个维度的字段都放在一张表存储, 增加数据冗余是为了减少关联, 便于查询. 查询一张表就可以查出不同维度的多个字段窄表: 和我们 mysql 普通表三范式相同, 把相同维度的字段组成一张表, 表和表之间关联查…

[转]科普 | 什么是宽表?

科普 | 什么是宽表&#xff1f;一文带你了解 数据仓库宽表_数据宽表_吕归尘0的博客-CSDN博客 一、什么是“宽表”&#xff1f; “宽表”从字面上的意思就是字段&#xff08;列&#xff09;比较多的数据库表&#xff0c;是通过关联字段将多个业务主题相关的数据表进行挂接组装…

数仓建模,宽表是什么?如何设计?

数仓建模&#xff0c;宽表是什么&#xff1f;如何设计&#xff1f; 宽表的设计为什么要建设宽表宽表的好处和不足如何设计宽表总结 宽表的设计 其实宽表是数仓里面非常重要的一块&#xff0c;宽表主要出现在dwd 层和报表层&#xff0c;当然有的人说dws 层也有宽表&#xff0c;…

线性代数笔记22——特征值和特征向量

特征向量 函数通常作用在数字上&#xff0c;比如函数f作用在x上&#xff0c;结果得到了f(x)。在线性代数中&#xff0c;我们将x扩展到多维&#xff0c;对于Ax来说&#xff0c;矩阵A的作用就像一个函数&#xff0c;输入一个向量x&#xff0c;通过A的作用&#xff0c;得到向量Ax。…

特征值和特征向量意义

本文转载自https://blog.csdn.net/fuming2021118535/article/details/51339881&#xff0c;版权问题请联系博主删除 在刚开始学的特征值和特征向量的时候只是知道了定义和式子&#xff0c;并没有理解其内在的含义和应用&#xff0c;这段时间整理了相关的内容&#xff0c;跟大家…

特征值和特征向量的几何含义理解

在刚开始学的特征值和特征向量的时候只是知道了定义和式子&#xff0c;并没有理解其内在的含义和应用&#xff0c;这段时间整理了相关的内容&#xff0c;跟大家分享一下&#xff1b; 首先我们先把特征值和特征向量的定义复习一下&#xff1a; 定义&#xff1a; 设A是n阶矩阵&am…

线性代数之——特征值和特征向量

线性方程 A x b Axb Axb 是稳定状态的问题&#xff0c;特征值在动态问题中有着巨大的重要性。 d u / d t A u du/dtAu du/dtAu 的解随着时间增长、衰减或者震荡&#xff0c;是不能通过消元来求解的。接下来&#xff0c;我们进入线性代数一个新的部分&#xff0c;基于 A x …