当前位置: 首页 > Web前端 > JavaScript

Javascript学习数据结构(数组、列表)

时间:2023-03-27 18:32:41 JavaScript

算法+数据结构=程序,任何一定规模的程序都需要某种类型的数据结构来保存程序中用到的数据,学习数据结构和算法,不仅可以知道是哪个数据结构和算法更有效,以及如何找出最适合解决手头问题的数据结构和算法。本文将使用javascript实现一个常见的数据结构数组。数组的标准定义是:存储元素的线性集合(collection)。可以通过索引任意访问元素。索引通常是数字,用于计算元素之间的存储位置。抵消。下面是数组的一些基本操作。创建数组最简单的方法是通过[]运算符声明一个数组变量。如果你这样创建一个数组,你会得到一个长度为0的空数组。letnumbers=[];console.log(numbers.length)//输出0直接把一组元素放在[]operatorletnumbers=[1,2,3,4,5];你也可以调用Array构造函数创建一个数组letnumbers=newArray(1,2,3,4,5);console.log(numbers.length);//显示5调用Array的构造函数时,只能传入一个参数,用于指定数组的长度letnumbers=newArray(10);数组中的元素不必是相同的数据类型letobjects=[1,"Joe",true,null];从字符串生成一个数组多个数组创建一个新数组letarr1=["1","2"];letarr2=["a","b","c"];letnewarr=arr1.concat(arr2);//newarr被赋值的['1','2','a','b','c']splice()方法截取一个数组的子集来创建一个新数组。array.splice(index,howmany,item1,.....,itemX)参数值参数说明index为必填项。整数指定从哪里添加/删除项,使用负值指定从数组末尾开始的位置。多少可选。要删除的项目数。如果设置为0,则不会删除任何项目。item1,...,itemX是可选的。要添加到数组的新项目。这里只演示数组的创建,添加删除元素后会用到splice()。letfruits=['Banana','Orange','Lemon','Kiwi','Apple','Mango']letarr=fruits.splice(2,4);console.log(arr)//['Lemon','Kiwi','Apple','Mango']from()方法从任何具有length属性的对象或可迭代对象返回数组。letmyArr=Array.from("ABCDEFG",(item)=>{returnitem+'1'});console.log(myArr)//['A1','B1','C1','D1','E1','F1','G1']filter()方法创建一个数组,其中填充了所有通过测试的数组元素letages=[32,33,16,40];letfilterAges=ages.filter(age=>{returnage>=18;})console.log(filterAges)//[32,33,40]可以调用Array.isArray()判断一个对象是否为数组,让数字=3;让arr=[7,4,1776];console.log(Array.isArray(numbers));//falseconsole.log(Array.isArray(arr));//真正的查找元素find()方法返回数组中第一个通过测试的元素的值letages=[3,10,18,20];letresult=ages.find(age=>{returnage>10})console.log(result)//18findIndex()方法返回数组通过测试第一个元素的索引letages=[3,10,18,20];letresult=ages.findIndex(age=>{returnage>10})console.log(result)//2includes()方法判断数组是否包含指定元素。letfruits=["Banana","Orange","Apple","Mango"];letresult=fruits.includes("Mango");console.log(result)//trueindexOf()中搜索一个元素数组并返回它的位置。letfruits=["Banana","Orange","Apple","Mango"];letresult=fruits.indexOf("Apple");console.log(result)//2lastIndexOf(),这个函数返回一样element最后一个元素letfruits=["Banana","pear","Apple","Apple","Mango"];letresult=fruits.lastIndexOf("Apple");console.log(result)//3Printarrayjoin()将数组的所有元素连接成一个字符串。元素将由指定的定界符分隔。默认分隔符是逗号(,)。letfruits=["Banana","Orange","Apple","Mango"];letstr=fruits.join();console.log(str)//Banana,Orange,Apple,MangoletandStr=fruits.join("and");console.log(andStr)//BananaandOrangeandAppleandAppleandMangotoString()将数组转换为字符串并返回结果。letfruits=["Banana","Orange","Apple","Mango"];letstring=fruits.toString();console.log(string)//Banana,Orange,Apple,Mango向数组添加元素push()方法会添加一个元素//Addasingleitemletarr=[1,2,3,4,5]arr.push(6)console.log(arr)//[1,2,3,4,5,6]//添加项目arr=[1,2,3,4,5]arr.push(6,7,8,9)console.log(arr)//[1,2,3,4,5,6,7,8,9]unshift()方法可以在数组开头添加元素,令arr=[1,2,3,4,5]arr.unshift(6,7,8)安慰。log(arr)//[6,7,8,1,2,3,4,5]splice()方法向数组添加项并返回删除的项。letarr=[1,2,3,4,5]arr.splice(3,0,'a','b','c')console.log(arr)//[1,2,3,'a','b','c',4,5]从数组中删除元素使用pop()方法删除数组末尾的元素:letarr=[1,2,3,4,5]arr.pop()//return5console.log(arr)//[1,2,3,4]shift()方法可以删除数组的第一个元素,令arr=[1,2,3,4,5]啊。pop()//return1console.log(arr)//[2,3,4,5]使用splice()删除数组中间的元素letarr=[1,2,3,4,5]arr.splice(1,3)console.log(arr)//[1,5]数组排序操作reverse(),该方法反转数组中元素的顺序。letarr=[1,2,3,4,5]arr.reverse()console.log(arr)//[5,4,3,2,1]sort()方法对数组的项进行排序。变量点=[40,100,1,5,25,10];点。排序(函数(a,b){返回a-b});安慰。log(points)//[1,5,10,25,40,100]迭代器方法forEach()方法按顺序为数组中的每个元素调用一次函数。letarr=[1,2,3,4,5]arr.forEach(item=>{console.log(item)})//每个元素都会遍历filter()方法创建一个数组,里面填充allpassed要测试的数组元素(作为函数提供)。让年龄=[32,33,16,40];letfilterAges=ages.filter(age=>{returnage>=18;})map()方法使用为每个数组元素调用该函数的结果创建一个新数组。letarr=[1,2,3,4,5]letnewArr=arr.map(item=>{returnitem*10})//返回新数组[10,20,30,40,50]reduce()方法为数组的每个值(从左到右)执行提供的函数。letarr=[1,2,3,4,5]arr.reduce((total,num)=>{returntotal+num},0);//对数组的每个值返回15reduceRight()方法(来自从右到左)执行提供的功能。letarr=[1,2,3,4,50]arr.reduceRight((total,num)=>{returntotal-num})//返回40every()方法检查数组中的所有元素是否都通过了测试letarr=[1,2,3,4,50]arr.every(item=>{returnitem<40})//returnfalsesome()方法检查数组中是否有元素通过测试letarr=[1,2,3,4,50]arr.some(item=>{returnitem<40})//返回truelistlist是一组有序的数据。每个列表中的数据项称为元素。不包含任何元素的列表称为空列表。列表中包含的元素数称为列表的长度。列表类的实现及其操作方法如下实现##实现列表类List类定义了三个属性length表示元素个数position表示当前指针位置dataStore表示数据集类List{length=0position=0dataStore=[]constructor(){}}length():获取元素个数length(){returnthis.length}append():添加元素到列表append(element){this.dataStore[this.length++]=元素;}find():在列表中查找一个元素find(element){for(letindex=0,length=this.length;index=this.length||after<-1){return}this.listSize++this.dataStore.length=this.length//双指针,从回到前面moveletindex=this.length-1letmoveIndex=this.length-2while(moveIndex>=-1){if(after==moveIndex&&index!=moveIndex){this.dataStore[index]=elementindex--break}this.dataStore[index]=this.dataStore[moveIndex]moveIndex--index--}}insert():在指定位置插入一个元素insert(element,index){this.insertAfter(element,index-1)}位置操作//headfront(){this.position=0;}//尾部(){this.position=this.length-1;}//前一步prev(){this.position>0&&this.position--}//后一步next(){this.position<(this.length-1)&&this.position++}//当前位置currPos(){returnthis.position}//移动到指定位置moveTo(position){position<(this.length-1)&&(this.position=position)}整体代码classList{length=0position=0dataStore=[]constructor(){}append(element){this.dataStore[this.length++]=element;}remove(element){letindex=0letmoveIndex=0letsize=this.lengthwhile(moveIndex<=size){if(this.dataStore[moveIndex]==element){moveIndex++this.length--continue}if(index=this.length||after<-1){return}this.length++this.dataStore.length=this.lengthletindex=this.length-1letmoveIndex=this.length-2while(moveIndex>=-1){if(after==moveIndex&&index!=moveIndex){this.dataStore[index]=elementindex--break}this.dataStore[index]=this.dataStore[moveIndex]moveIndex--index--}}insert(element,index){this.insertAfter(元素,索引-1)}front(){this.position=0;}end(){this.position=this.length-1;}prev(){this.position>0&&this.position--}next(){this.position<(this.length-1)&&this.position++}currposition(){returnthis.position}moveTo(positionition){positionition<(this.length-1)&&(this.position=positionition)}}