JavaScript 数组方法概括和栈的模拟、实现

方法名方法描述
concat连接两个或更多数组,返回结果
every对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则结果返回true
filter对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach对数组中的每一项运行给定的函数,没有返回值
join将所有的数组元素连接成一个字符串
indexOf返回第一个与给定参数相等的数组元素的索引,没有找到则返回 -1
lastIndexOf返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
map对数组中的每一项运行给定的函数,每次返回函数调用结果组成的数组
reverse颠倒原先数组的顺序,原先第一个元素变成最后一个,最后一个变成第一个
slice传入索引值,将数组中对应索引范围内的元素作为新数组返回
some对数组中的每一项运行给定的函数,如果任一项返回了true,则返回true
sort按照字母顺序对数组排序,同时可以传入指定的排序方法的函数作为参数
toString将数组作为字符串返回
valueOf将数组作为字符串返回

自定义排序:

以上代码片段对对象类型的数组的年龄进行排序

2、字符串排序

 let names = ['Ana','ana','john','John'];
    console.log(names.sort());

排序结果为:["Ana", "John", "ana", "john"]  。因为JavaScript做字符比较的时候是根据ASCII值来比较的。

 

栈的模拟:

function Stack() {
        let items = [];
        this.push = function (element) {
            items.push(element);
        };
        this.pop = function () {
            return items.pop();
        };
        this.peek = function () {
            return items[items.length-1]; //返回最后一项
        };
        this.isEmpty = function () {
            return items.length === 0;
        };
        this.size = function () {
            return items.length;
        };
        this.clear = function () {
           items = [];
        };
        this.print = function () {
            console.log(items.toString());  //输出的是从栈底到栈顶
        };
    }

push方法:每次添加一个新元素到栈顶         

pop():移除栈顶元素,同时返回被移除的元素

peek():返回栈顶的元素,不对栈做任何的修改,可以理解为只读的方法

isEmpty():判断栈内是否为空,栈内没有元素返回true,有元素返回false

clear(): 移除栈内的所有元素

size():返回栈内的元素个数。

 

栈的使用:从十进制数转换成二进制数

 function divideBy2(decNumber) {
          let remStack = new Stack(),
              rem,
              binaryString = '';
          while(decNumber>0){
              rem = Math.floor(decNumber % 2);
              remStack.push(rem);
              decNumber = Math.floor(decNumber / 2);
          }
          while(!remStack.isEmpty()){
              binaryString += remStack.pop().toString();
          }
          return binaryString;
      }
      console.log(divideBy2(23));//10111
      console.log(divideBy2(10)); //1010

这个转换方法就是通过十进制数与2整除取余数,压栈,然后通过pop()方法把栈中的元素都移除,把出栈的元素连接成字符串。

十进制转换成任意进制的算法:

 function baseConverter(decNumber, base) {
        let remStack = new Stack(),
            baseString = '',
            digits = '0123456789ABCDEF';
        while(decNumber > 0){
            rem = Math.floor(decNumber % base);
            remStack.push(rem);
            decNumber = Math.floor(decNumber / base);
        }
        while(!remStack.isEmpty()){
            baseString += digits[remStack.pop()];
        }
        return baseString;
    }
    console.log(baseConverter(25536,2)); //110001111000000
    console.log(baseConverter(25536,8)); //61700
    console.log(baseConverter(25536,16));//63C0

digits 储存余数,进行取余数,压栈、出栈,连成字符串,可以将10进制转换成 16进制以内的其他进制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值