javaScript实现的数据结构

    xiaoxiao2022-06-24  26

    javaScripts中的函数

    javaScripts中的函数没有引用传递,只有值传递 但是数组作为参数传递给函数时,此时的数组是作为地址传递给函数的,可以理解为引用传递。

    变量作用域

    拥有全局作用域的变量:1、在函数外定义的变量 2、在函数体内没有经过var申明的变量 javaScripts拥有的函数作用域,没有块级作用域 什么是块级作用域: 任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 c、java等其他语言都是有块级作用域,但是javaScript没有块级作用域。

    #include <stdio.h> void main() { int i=2; i--; if(i) { int j=3; } printf("%d/n",j); }

    会输出use an undefined variable:j的错误 但是在js中没有块级作用域

    function test(){ for(var i=0;i<3;i++){ } console.log(i); //会输出3 } test();

    会输出3 在{}之外仍然可以访问到i 递归

    function he(i) { if(i==0){ return i; } else{ return i+he(i-1); } }

    实现的就是从0加到5利用递归实现

    一维数组和数组的操作方法

    创建数组

    var numbers=[]; var cc=new Array(); console.log(cc instanceof Array) //检测是否为数组 var cc=[1,'e',true];

    数组中的元素可以不是数字 由字符串生成数组

    var aa="hello,jdisajd,djska"; var cc=aa.split(","); console.log(cc.length) //3

    将数组转化为字符串 使用的是join()方法和tostring()方法 join()的方法

    var aa=[1,3,6,'dda',cc]; console.log(aa.join("c"));

    输出的结果是用C来连接数组中的每一个元素 改变数组的函数 向数组添加一个元素 push unshift

    var aa=[1,3,6,'dda',cc]; aa.push('21'); //在数组的末尾加一个元素 aa.unshift('1212') //在数组的开始添加一个元素

    从数组中删除一个元素

    aa.pop() //从数组的末尾删除一个元素 aa.shift() //从数组的开始删除一个元素

    从数组的中间添加或者删除元素 splice()方法 实现为数组添加元素 需要提供一下参数 1、开始索引 2、想要删除的元素的个数(添加是的时候为0) 3、想要添加的数组的元素

    var aa=[1,3,6,4,6]; aa.splice(1,4,4,5,6,7); console.log(aa); //[1, 4, 5, 6, 7]

    第二个参数为要删除的个数,只是添加的话就为0, 后面的参数都是添加到数组的元素。 为数组排序 reverse() 这个方法知识实现了将数组的元素进行反转。 sort() 这个方法是将数组的元素按照ACII码来排序。但是可以改变这种排序的方式,通过传递一个函数。

    /* function compare(num1,num2){ return num1-num2; }*/ function compare(num1,num2){ if(num1>num2){ return -1; }else{ return 1 } } var aa=[1,3,6,12,4,6]; aa.sort(compare); console.log(aa); //[1, 4, 5, 6, 7]

    上面的compare函数被传递给sort函数从而实现排序 迭代器方法、 1、不生成新数组的迭代器 不会产生一个新的数组,但是会对数组中的每一个元素都会进行一个操作。 forEach()函数 接受的是一个函数,对数组中的每一个元素都执行这个函数

    function cc(num) { console.log(num*num); } var cc1=[1,2,3,4] cc1.forEach(cc);

    every()函数 接受的是一个返回值为布尔类型的函数。对数组每一个元素使用该函数,如果对于所有元素都返回true,该方法就会返回true,否则会返回false 与

    function cc(num) { return num%2==0; } var cc1=[2,4] console.log(cc1.every(cc)); //true

    some()方法 接受的是一个返回布尔值得函数,只有一个元素返回true就会使得这个函数返回true 或

    function cc(num) { return num%2==0; } var cc1=[1,3,2,4] console.log(cc1.some(cc)); //true

    2、生成新数组的迭代器 map() 方法 这个方法是和forEach()类似的功能,但是这个方法返回的的是一个新的数组,不会改变原来的数组。

    function cc(num) { return num+5; } var cc1=[1,3,2,4] console.log(cc1.forEach(cc)); //undefined console.log(cc1.map(cc)); //[6, 8, 7, 9]

    filter()方法 接受的也是一个返回值为布尔类型的函数,和every()方法不同的是当岁数组的所有的元素应用该函数时,会将结果为true的元素集合到一个数组中,会将结果为false的元素集合到一个数组中

    function even(num) { return num%2==0; } function odd(num) { return num%2==1; } var cc1=[1,3,2,4] console.log(cc1.filter(even)); //[2,4] console.log(cc1.filter(odd)); //[1,3]

    indexOf() 方法着数组中的某一个元素

    var aa="hello,jdisajd,djska"; var cc=aa.split(","); console.log(cc.indexOf("hello"))

    二维数组

    js中本身没有二维数组,通过下边的方法模拟创建一个二维数组

    Array.martix=function(rows,cols,init){ var arr=[]; for(var i=0;i<rows;i++){ var cc=[]; for(var j=0;j<cols;j++){ cc[j]=init; } arr[i]=cc; } return arr; } var ss=Array.martix(2,3,0); console.log(ss[0][0]); //0

    列表 list 实现的是索引列表

    js中列表可以是任意的数据类型 用js实现列表和对列表的操作 https://github.com/wenjuanzhao/git/blob/master/3.1-list.js

    栈 -元素先进后出

    js实现栈的数据结构 https://github.com/wenjuanzhao/git/blob/master/3.2-stack.js 栈是一种特殊的列表 栈内的元素只能在一端访问元素。这一端称为栈顶 使用栈实现数值之间的进制转换

    function mulBase(num,base) { var s=new stack(); do{ s.push(num
    转载请注明原文地址: https://ju.6miu.com/read-1123743.html

    最新回复(0)