4.6数组

#数组

 -动态数组

 -数组的下标从0开始,JS中数组越界不会异常

 例:arr[100]=100;//是个对象

 console.log(arr) [1,2,3,4,5,....,100]真的会给你填充到100个 中间全是undefined

let arr3=[];
arr3[arr3.length+1]=1;

方法:

-push-添加一个或多个元素到数组的末尾,会返回当前数组的长度,这个就是栈顶压入

-pop 这个方法删除数组中最后一个元素,并且返回这个元素 栈顶弹出

//栈结构 先进后出
let arr5=[1,2,3];
console.log(arr5);//(3) [1, 2, 3]

console.log(arr5.push(5,6,7));
console.log(arr5);//(6) [1, 2, 3, 5, 6, 7]

console.log(arr5.pop());//7
console.log(arr5.pop());//6
console.log(arr5.pop());//5

 代码案例:

//给定一个只包括(){}[]的字符串,判断字符串是否有效
let str=`{ ( ) [ ( ) ] }`;
let dic={")":"(",
        "]":"[",
        "}":"{"}

/*1.先键个函数 函数名最好有意义,参数名随便取
2.设置个空的数组变量当栈 准备存取数据
3.分开文本 返回一串数组, .spilt()方法[split("") 分割每个字符,],新建一个数组接受  类似于易语言的分割文本()

4.\s代表正则表达式中的一个空白字符。遍历返回的切割好字符的arr数组,因为里面有空白
字符,用if 正则判断遇到空白字符,就跳到循环尾然后继续。
然后就要开始入栈了,开符合可以进去,闭符号需要能匹配上左边符号才能入栈
新建一个对象{}然后将开闭符合设置为键值对
判断传入diC[]和属性名是否相等,相等就(闭符号)进入下个判断 
要去栈顶取东西(就代表是栈尾)=stk.length 然后减去1取出最后一个值(开符号)判断是否和入栈的闭符号是否相等
匹配成功就直接.pop方法出栈。否则就直接返回false
不等的就else(代表是开符合可以直接进去)进入stk栈里面存放
[]索引搜索器
最好返回一下栈里面的长度,如果是0 ture 代表正确
*/
function isValid(s){
    let stk=[];    
    let arr=str.split("");    
    for(const c of arr) {
        if(/\s/.test(c)) continue;
        if(dic[c]){//不匹配的话就代表不是闭符号
            if(stk[stk.length-1]==dic[c])//闭符号匹配了就进入栈
            //stk.length-1是因为数组下标是0开始的,数组长度-1后就是最后一个元素的下标
            {stk.pop();//匹配成功就是栈尾出去返回最后一个元素
        }else{
            return false;
        }
    }else{
            stk.push(c);//开符号进栈
        }
    }//如果匹配完成 我的栈如果是空的 说明验证没有问题
    return stk.length==0;
}
console.log(isValid(str))

-shift 删除数组的第一个元素,并且返回这个元素,如果是栈的话,就在栈底弹出

let arr=[2,4,6,8,10];

console.log(arr.shift())//2
console.log(arr.shift())//4

-unshiift 从数组的第一个元素位置插入一个或多个元素,并且返回数组的长度

arr.unshift(1);
console.log(arr);//(4)[1,6,8,10]
console.log(arr.unshift(2,3,4));//7
console.log(arr);//(7) [2, 3, 4, 1, 6, 8, 10]

let queus=[];
//队列是先进先出 2个出口   栈是先进后出 1个出口
queus.push("task1")
queus.push("task2")
queus.push("task3")
queus.push("task4")

console.log(queus.shift())
console.log(queus.shift())
console.log(queus.shift())
console.log(queus.shift())

 -concat - 合并数组

let a=[1,2,3,4];
let b=[5,6,7,8];
console.log(a.concat(b));//(8) [1, 2, 3, 4, 5, 6, 7, 8]

 -Join  分割数组 - 得到是文本,将数组中的元素按指定的字符串进行分割,

        将指定的字符串设置为数组元素的分隔符

let a=[1,2,3,4];
let b=[5,6,7,8];
console.log(a.concat(b));//(8) [1, 2, 3, 4, 5, 6, 7, 8]
console.log(a.concat(b).join("||||"));//1||||2||||3||||4||||5||||6||||7||||8
console.log(a.concat(b).join(""));//12345678 把数组变成文本

-splice 删除输入元素 更新数组中的元素内容,也可以用于插入行的元素

  -strat:起始位置 从0开始,start也可以为负数,为负数时代表从数组末尾开始

  -deleteCount:删除几个(替换几个)

  -...items:无限参数,代表要替换的参数

let array=[`apple`,`boy`];
let value= array.splice(0,1)//起始位置是0 删除几个 返回被删除的值
console.log(value,array)//(1) ['apple'] (1) ['boy']

let arr1=[1,2,3,4,5,6,7]

arr1.splice(2,1,9)//有...代表无限参数,把3替换为9
console.log(arr1)//(7) [1, 2, 9, 4, 5, 6, 7]

//从数组索引第二个位置开始 删除2个元素,并将第三个参数提供的元素 插入到这个位置
arr1.splice(2,2,9,8,0);
console.log(arr1);//(8) [1, 2, 9, 8, 0, 5, 6, 7]

let arr2=[1,2,3,4,5,6,7]
//如果没有的话 就来个新的
arr2.splice(7,1,9)

console.log(arr2)//(8) [1, 2, 3, 4, 5, 6, 7, 9]

//使用负数从-1开始 代表倒序

arr2.splice(-2,1,8)
console.log(arr2)//(8) [1, 2, 3, 4, 5, 6, 8, 9]
//如果负数索引指定太大,数组无法满足,就会在数组的最前面替换这个元素
arr2.splice(-10,1,8)
console.log(arr2)//(8) [8, 2, 3, 4, 5, 6, 8, 9]

 -reverse 颠倒数组

//string没有这个方法,需要用Array.from("MD5").reverse() 转换为数组后使用
arr2=[1,2,3,4,5,6,7]
console.log(arr2.reverse())//(7) [7, 6, 5, 4, 3, 2, 1]

-sort 对数组元素进行排序 ,并且返回这个数组

  -参数是一个方法,传入的方法会接受2个参数,在函数内,我们自己定义一个比较规则返回响应的值给sort函数进行排序

  -cfunc(a,b)

  ····bash

    *return 结果小于0 那么a会排到b 的前面

    *return 结果等于0 那么 a和b的位置不变

    *return 结果大于0 那么b会排到a前面

  .....

arr2 =[22,11,56,4,7,96,32,12]
//排序规则默认就是 文本排序
console.log(arr2.sort())//(8) [11, 12, 22, 32, 4, 56, 7, 96]

console.log(arr2.sort(cfunc))//(8) [96, 56, 32, 22, 12, 11, 7, 4]
function cfunc(a,b){
    /*
    *return 结果小于0 那么a会排到b 的前面
    *return 结果等于0 那么 a和b的位置不变
    *return 结果大于0 那么b会排到a前面
    */
 return b-a
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值