首页 > 其他分享 >arry数组的一些方法【转】

arry数组的一些方法【转】

时间:2023-08-17 17:25:55浏览次数:41  
标签:console log 张三 let arr2 数组 方法 arry

1. 数组头部插入数据

数据头部插入数据,你是否还在用JS提供的unshift()方法
let arr = [1,2,3]
arr.unshift('我是头部插入的数据')
console.log(arr) // => ['我是头部插入的数据', 1, 2, 3]

现在21世纪了,得用新的思路去解决问题,考虑到性能的问题,现在我们可以采用以下的办法实现数组插入数据
let arr = [1,2,3]
let newArr = ['haha'].concat(arr)
console.log(newArr) // => ['haha',1, 2, 3]

这样性能就能比较好?我们口说无凭,直接测试一下:
let arr = []
console.time('开始测试 100次 数据操作时 concat 的性能')

for (let i = 0; i < 100; i++) {
arr.concat(['concat在测试'])
}
console.timeEnd('开始测试 100次 数据操作时 concat 的性能')
console.time('开始测试 100次 数据操作时 unshift 的性能')
for (let i = 0; i < 100; i++) {
arr.unshift(['unshift在测试'])
}
console.timeEnd('开始测试 100次 数据操作时 unshift 的性能')

2. 数组去重

数组去重这个方法大家就用得比较多了
let arr = ['9', '1', '2', '3', '4', '5', '1', '3', '2', '6', '2']
console.log(Arry.from(new Set(arr))) // =>['9', '1', '2', '3', '4', '5', '6']
//倘若不用Arry.from()呢?
console.log(new Set(arr)) // => {'9', '1', '2', '3', '4','5','6'}

复制数组
利用 扩展运算法 实现数组的复制。值得注意的是,扩展运算符 的使用是深拷贝还是浅拷贝得看数据源的数据类型。如果只是一层数组或是对象,其元素只是简单类型的元素,那么属于深拷贝。

let arr = ['张三', '李四', '王五', '找六', '张三']
let test = [...arr] // => 深拷贝
console.log(test) // => ['张三', '李四', '王五', '找六', '张三']
let obj = {
age: 18,
name: '小明',
address: {
city: '东莞'
}
}
let newObj = {...obj}
console.log(newObj.address.city) // => 东莞

由上可见,扩展运算符 还可以将数组转为对象

let arr = ['张三', '李四', '王五', '找六', '张三']
let obj = { ...arr }
console.log(obj) // => {0: '张三', 1: '李四', 2: '王五', 3: '找六', 4: '张三'}

3.合并数据
常用的合并数据 concat 这里就不提了,这里我们使用 扩展运算符 来合并数据

let arr2 = ['张三', '李四', '王五', '找六', '张三']
let arr3 = ['小明', '小红', '王五', '张三']
console.log([...arr2, ...arr3]) // => ['张三', '李四', '王五', '找六', '张三', '小明', '小红', '王五', '张三']
//很明显这样的合并不是我们想要的效果,我们需要对数组去重
console.log(Array.from(new Set([...arr2, ...arr3])))
// => ['张三', '李四', '王五', '找六', '小明', '小红']


4.数组交集
讲到合并必然会想到交集。回想一下,之前我们去两个数组的交集是不是直接遍历两个数组,然后比较值来完成的?今天,我们利用 filter 跟ES7的 includes 方法来完成

let arr2 = ['张三', '李四', '王五', '找六', '张三']
let arr3 = ['小明', '小红', '王五', '张三']
let jiaoji = [...new Set(arr2)].filter(item => arr3.includes(item)) // => ['张三', '王五']

获取数组的随机值
使用Math.floor()和Math.random()方法获得一个随机值

let arr2 = ['张三', '李四', '王五', '找六', '张三']
console.log(arr2[Math.floor(Math.random() * (arr2.length))]) // => 张三


获取最后出现的下标
lastIndexOf 可以帮助我们获取数组最后出现字符的下标

let arr2 = ['张三', '李四', '王五', '找六', '张三']
console.log(arr2.lastIndexOf('张三')) // => 4
数组倒序
let arr2 = ['张三', '李四', '王五', '找六']
console.log(arr2.reverse()) // => ['找六', '王五', '李四', '张三']
说到 reverse 这里插一句,实现字符串倒叙可以怎么完成?我们还是利用数组的 reverse 方法。首先将字符串切割为数组,然后反转数组,最后拼接数组为字符串

let str = 'abcdef'
console.log(atr.split('').reverse().join('')) // => fedcba
替换任意位置的值
splice() 方法从数组中添加/删除项目,然后返回被删除的数据。该方法会改变原始数组。注意插入值的位置!

let arr2 = ['张三', '李四', '王五', '找六', '张三']
arr2.splice(1, 3, '替换值1', '替换值2', '替换值3')
console.log(arr2) // => ['张三', '替换值1', '替换值2', '替换值3', '张三']
arr2.splice(0, 1) // => 不传入3+n值的时候代表删除数据
console.log(arr2) // => ['张三', '替换值1', '替换值2', '替换值3', '张三'] // => ['李四', '王五', '找六', '张三']
遍历数组
平时我们使用最多的就是数组的 .map 方法,其实还有一个方法也能达到一样的目的,那就是Array.from

let list = [
{ name: '小明', age: 11 },
{ name: '小红', age: 13 },
{ name: '校长', age: 15 }
]
Array.from(list, (item) => item.str = `名字:${item.name},年龄:${item.age}`)
console.log(list)
结果就是可以直接改变list的数据:图片

去掉数据中的虚假值
JS中虚假值有:false、0、''、null、NaN、undefined、-0

let arr4 = ['小明', '小蓝', '', false, ' ', undefined, null, 0, NaN, true]
console.log(arr4.filter(Boolean)) // => ['小明', '小蓝', ' ', true]
值得注意的是' ' 并不是虚假值

数组求和
通常想到的就是直接遍历数组,然后累加,其实 reduce 有很多的妙用

let arr2 = ['张三', '李四', '王五', '找六', '张三']
console.log(arr2.reduce((a, b) => a + b)) // => 张三李四王五找六张三
let arr5 = [1, 2, 3, 4]
console.log(arr5.reduce((a, b) => a + b)) // => 10
当数组中纯数字类型的话得到的值是数字,简单类型的字符串的话是字符串

const s = new Set(this.pitchontable);
this.tableData = [...new Set(this.tableData)].filter(x => !s.has(x));


const arr1 = [1, 2, 3, 4, 5, 0],
arr2 = [5, 6, 7, 8, 9];
// 交集
let intersection = arr1.filter(function (val) { return arr2.indexOf(val) > -1 })
// 并集
let union = arr1.concat(arr2.filter(function (val) { return !(arr1.indexOf(val) > -1) }))
// 补集 两个数组各自没有的集合
let complement = arr1.filter(function (val) { return !(arr2.indexOf(val) > -1) })
.concat(arr2.filter(function (val) { return !(arr1.indexOf(val) > -1) }))
// 差集 数组arr1相对于arr2所没有的
let diff = arr2.filter(function (val) {
return arr1.indexOf(val) === -1
})
console.log('arr1: ', arr1);
console.log('arr2: ', arr2);
console.log('交集', intersection);
console.log('并集', union);
console.log('补集', complement);
console.log('差集', diff);
// 总结:数组
// 交集就是找相同的部分
// 并集是找相互没有的部分
// 补集把两个数组相同的去掉
// 差集就是找a-里面没有b的部分


array 新特性flat()和flatMap()

flat()和flatMap()本质上就是是归纳(reduce) 与 合并(concat)的操作。
flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

//flat()方法最基本的作用就是数组降维

var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity);

 

 

转载:https://blog.csdn.net/weixin_51127384/article/details/120651510

标签:console,log,张三,let,arr2,数组,方法,arry
From: https://www.cnblogs.com/jiduoduo/p/17638204.html

相关文章

  • 数组下标中值求取算法
    问题解法一1.先计算出所需区间的大小10-2=82.计算当前区间的中值8/2=43.用区间起点加上中值,即为真实的中间值2+4=6完整公式是(end-start)/2+start解法二1.前置扩充所需区间start大小2.后置扩充所需区间start大小3.新的区间大小是12,那么中间值就是6完整公式是(start+e......
  • 常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
    Web安全漏洞是指在Web应用程序中存在的可能被攻击者利用的漏洞,正确认识和了解这些漏洞对于Web应用程序的开发和测试至关重要。一、常见的Web安全漏洞类型:1、跨站脚本攻击(Cross-SiteScripting,XSS):攻击者通过向Web页面注入恶意脚本来执行恶意操作,例如窃取用户敏感信息......
  • https证书获取的方法及好处
    我们常说的https证书其实就是ssl证书,眼下为网站部署https证书是保障网站安全必不可少的一步。而https证书该如何获取呢?下面就简单介绍一下https证书获取的方法。https证书获取途径有两种:自己签发和由受信任的CA机构签发。自己给自己签发而来的证书也叫自签名ssl证书,这种类型的证书......
  • git bash中文文件名乱码的处理方法
    1.gitbash窗口右键,选择Options->Text,选择zh_CN、UTF-82.gitbash终端执行命令gitconfig--globalcore.quotepathfalsegitconfig--globalgui.encodingutf-8gitconfig--globali18n.commitencodingutf-8gitconfig--globali18n.logoutputencodingutf-8expor......
  • Unity生命周期方法
    详解Awake:当场景开始时(简单理解成游戏启动),若物体处于激活状态(active)会被立即执行,仅执行一次。OnEnable:接在Awake之后,且需要激活状态下,被执行,当物体每一次被激活时都会执行一次。Reset:编辑器模式下,当脚本第一次被挂载,或是执行Reset操作时会被执行。Start:早于所用的Update,在第一......
  • 解锁New Bing的终极方法
    为了访问NewBing,我做了很多尝试。。。1.newbinggogo (基本不能用了,很可惜的一个项目)2.无忧行-上网专用插件或无忧行-一款高效、免费、安全、稳定的上网插件分免费版和付费版,对于免费版而言,它能解锁Google,newbing,ChatGPT,但是从某一天起,www.bing.com/chat的聊天加上了......
  • python 初始化类对象时没有执行类的构造法方法
    这个地方错了  修改: ......
  • Go语言实现计数器的方法有哪些?
    Go语言中,实现计数器可以通过使用不同的机制和数据结构来实现。以下是几种常见的计数器实现方法:1 基于原子操作的计数器:Go的sync/atomic包提供了原子操作,可以用于实现高效的计数器,适用于并发环境。package mainimport (    "fmt"    "sync"    "sync/atomic")func......
  • Spring实现幂等性的方法
    在开发Web应用程序时,确保接口的幂等性是一项重要任务。幂等性是指对同一个请求的多次执行应该产生相同的结果,而不会引起不正确的操作或数据损坏。在Spring框架中,我们可以利用一些功能和工具来实现幂等性。本文将介绍一种基本的方法来在Spring中实现幂等性。1.幂等性的概念和原则在......
  • php数组
    可以使用单个变量名存储多个不同类型的数据的特殊变量,这就是php数组。php数组就是一个特殊的变量,它允许存储多个任意类型的数据。php数组有两种类型,分为索引数组和关联数组。索引数组:变量的“编号”是数,整数不具备一定的语义。关联数组:变量的"编号”用字符中表示,可以具备一定的语义......