数组---基本方法---去重数据(随笔最后)
1.向数组添加数据
// push()向数据末尾添加数据,并返回添加数据后的数组的长度 var arr = [1,2,3] console.log(arr.push(4), arr)//4 [ 1, 2, 3, 4 ]
//unshift()向数据起始位置添加数据,并返回添加数据后的数组的长度 var arr = [1,2,3] console.log(arr.unshift(4), arr)//4 [ 4, 1, 2, 3 ]
2.删除数组元素
// pop()方法删除数组的最后一个元素,并返回删除的元素 var arr = [1,2,23,454] console.log(arr.pop(), arr)//454 [ 1, 2, 23 ]
// shift()方法删除数组的第一个元素,并返回删除的元素 var arr = [23,434,54] console.log(arr.shift(), arr)//23 [ 434, 54 ]
3.截取数组
// slice()截取数组,截取的值不会在数组消失 //注意下标从0开始,截取的极值不包括开始(2),包括结尾(4) var arr = [1,2,3,4,5,6] console.log(arr.slice(2,4))//[ 3, 4 ]
// splice()截取数组,截取的值会在原数组消失,第一个参数值是哪位开始,第二个参数值是截取的长度 var arr = [1,2,3,4,5,6] console.log(arr.splice(2,4), arr)//[ 3, 4, 5, 6 ] [ 1, 2 ]
4.对数组的元素进行运算
let arr=[1,23,45] console.log(arr.reduce((a,b)=>a+b))//69 console.log(arr.reduce((a,b)=>a*b))//1035
5.颠倒数组元素的排序
// reverse()会颠倒数组元素的顺序 let arr = [1,2,3] console.log(arr.reverse())//[3,2,1]
6.合并数组
//concat()合并两个数组 var con1=[1,3,5,6] var con2=[23,535,65] console.log(con1.concat(con2))
7.ascii码排序
// sort()默认情况下sort方法是按ascii字母顺序排序的 let daoxu=[32,4,76,54,7] console.log(daoxu.sort())//[ 76, 7, 54, 4, 32 ]
8.自然数排序
//封装数组排序函数 //包装有参函数,a,b;a-b正序,a+b倒序 function sortby(a,b){ return a+b; } let a=[1,4,5,3,2,8] console.log(a.sort(sortby))//[ 8, 2, 3, 5, 4, 1 ]
9.检查元素是否存在数组内
// 数组的indexOf let index=[1,24,56,7,8] console.log(index.indexOf(56))//2所要检查元素在数组的位置 console.log(index.indexOf(10))//-1 所检查的元素如果不在数组范围里,则返回-1
//includes有此值,返回true,反之false==推荐 console.log(index.includes(1))
10.数组元素分割字符串
// join()方法,把数组的所有元素放入一个字符串,,也可以以自定义字符分割 let arr=[123,4,546] console.log(typeof(arr.join()),arr.join())//string//123,4,546 console.log(arr.join("|"))//123|4|546
11.数组转换为字符串
//toString()把数组转换为字符串,并返回结果。 let arr = [12,334,543,43] console.log(arr.toString(), typeof(arr.toString()))
12.检测对象是否为数组
// instanceof 用于判断一个变量是否某个对象的实例, // obj(检测的对象) instanceof cons(构造函数) // instanceof 运算符用来检测 cons.prototype 是否存在于参数 obj 的原型链上。 let arr = [1,23,5,4] console.log(arr instanceof Object)//true //Array也是Object的子类 console.log(arr instanceof Array)//true
// Array.isArray()方法用于判断一个对象是否为数组 console.log(Array.isArray([]))//true console.log(Array.isArray([1]))//true console.log(Array.isArray(true))//false
13.取数组最大值
Math.max.apply(null,[1,2,3,4,5,6])
14.已知一个值,拿在数组对应的下标
//lastIndexOf(),已知一个值,拿到在数组对应的下标 let arr = [23,24,2,53] console.log(arr.lastIndexOf(2))
15.map
//map(),依次向函数中传入数组的数据,并把每次的返回结果组成一个新的数组, //elem当前的数据,index,当前数据的下标,arr,数组本身。 let arr=[1, 2, 3].map(function(elem, index, arr) { console.log(elem,index,arr) //1 0 [ 1, 2, 3 ] //2 1 [ 1, 2, 3 ] //3 2 [ 1, 2, 3 ] return elem * index; }); console.log(arr)//[ 0, 2, 6 ]
16.filter
a.去除数组内为false的元素
let arr = [1,414,4,324,5,"",0,null,undefined,"r2r"] console.log(arr.filter(item => item)) //此方法可以去除数组内空字符串、null、undefined、0,
b.去除数组内重复的元素→不推荐,这应该是倒数第二慢的方法,倒数第一,大家都懂的
let arr = [1, 2, 2, 3, 4324, 43253, "a", "a", "c", 55,534,63];
console.log(arr.filter((item, index, self) => self.indexOf(item) ===index))
c.去除数组内不符合条件的
let arr = [1,2,3,4,5,6,6,78,8] console.log(arr.filter(item => item >10))//78
17.数组去重
a. 定义两个数组
let arr = Array.from(new Array(100000), (item, index) => { return index }) let arr2 = Array.from(new Array(100000), (item, index) => { return index + index })
b. filter + indexOf 16706ms,双重for循环就不用说了
let start = new Date().getTime()
function dist(a, b){ let arr = a.concat(b) return arr.filter((item, index, self) => self.indexOf(item) === index) } dist(arr, arr2)
let end = new Date().getTime() console.log(end-start)
c. es6 → Set 22-28ms
let start = new Date().getTime() function dist3(a, b){ return Array.from(new Set([...a,...b])) } dist3(arr, arr2) let end = new Date().getTime() console.log(end-start)
d. for + of 22-28ms
let arr3 = ['1', 1, '1', 2], result=[], obj = {} let start = new Date().getTime() function dist2(a, b){ let arr = a.concat(b) //['1',1,'1'] '1' == 1 for(let i of arr){ if(!obj[i]){ result.push(i) obj[i] = 1 } } console.log(result) } dist2(arr, arr2) let end = new Date().getTime() console.log(end-start)
本文来自博客园,作者:时光凉忆,转载请注明原文链接:https://www.cnblogs.com/naturl/p/9564071.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)