【总结】javaScript集合

1、深度优先遍历算法

<body>
   <div id="app">
      <ul>
         <li><a href="">{{total}}</a></li>
         <li><a href="">{{total}}</a></li>
         <li><a href="">{{count}}</a></li>
         <li><a href="">{{count}}</a></li>
         <li><a href="">{{count}}</a></li>
      </ul>
      <ul>
         <li><a href="">{{total}}</a></li>
         <li><a href="">{{total}}</a></li>
         <li><a href="">{{total}}</a></li>
         <li><a href="">{{count}}</a></li>
         <li><a href="">{{count}}</a></li>
       </ul>
    </div>
</body>

<script>
 var vm = new Vue({
   el: '#app',
   data: {}
 })

// 遍历父元素下的所有子元素,nodeName 是指标签名
// 深度优先遍历算法:当碰到一个元素,既有兄弟,又有子,优先向子级查询,只有所有子级查找完,再查找兄弟
// 深度优先遍历算法
function getChildren(parent) {
   let children = parent.children
   for (var child of children) {
      // console.log(child.nodeName)
      this.getChildren(child)
      let total = 12100
      let count = 5
      if (child.innerHTML=='{{total}}') {
         child.innerHTML = total
      } else if(child.innerHTML=='{{count}}'){
         child.innerHTML = count
      }
   }
}
this.getChildren(document.body)
</script>

2、异步,回调函数 根据相同的按钮点击显示不同的值 

<div>
   <button>click me!</button>
   <button>click me!</button>
   <button>click me!</button>
   <button>click me!</button>
   <button>click me!</button>
</div>

<script>
  function getNoData(num){
     let button = document.querySelectorAll('button')
     for(let i=0;i<button.length;i++){
        button[i].onclick=function(){
           console.log(i)
        }
     }
     for(var i = 0; i < num.length; i++){
        (function(i){  // 局部函数自调形成闭包
           console.log('fdfsd'+i)
        }(i))
     }
     for(let i=0;i<num.length;i++){
        setTimeout((i) => { // 异步,回调函数,let ES6,函数自调
           console.log(i)
        }, 50);
     }
  }
  this.getNoData(50)
</script>

3、观察者模式

let data ={
   money:1000,
   setMoney(money){
   this.money = money
   this.notify()
},
lookArr:[],
notify(){
  this.lookArr.forEach((look)=>{ // 要求,凡是进入lookArr数组中的对象,必须自身携带一个 getMoneny()函数,表示自己是关注money变化的
    look.getMoney()
  })
}
}
var obj1={
   money:0,
   getMoney(){
      console.log(`obj1获得被修改的money:${data.money}`)
      this.money=data.money
   }
}
var obj2={
  money:0,
  getMoney(){
     console.log(`obj2获得被修改的money:${data.money}`)
     this.money=data.money
  }
}
data.lookArr.push(obj1)
data.lookArr.push(obj2)
data.setMoney(500)
console.log(obj1.money,obj2.money)
data.setMoney(600)
console.log(obj1.money,obj2.money)

4、正则

  

// 简单替换/高级替换
// 替换敏感词,需求(简单替换/高级替换)
// 1.简单替换:将所有找到的敏感词都替换为统一的新词
// 2.高级替换:根据每次找到的敏感词的不同,动态选择不同的新词
// a.str.replace(/正则/ig,'新值')
// 把所有小字开头的人名替换为**
// var str = "老师,请用 小红 我的 朋友 造句。 小亮:小红是我的朋友。小然:朋友,小红是我的。"
var str ="you can you up,no can no bibi"
// 查找以小开头的人名组合成数组
var arr= str.match(/小[\u4e00-\u9fa5]/g)
console.log(arr)
// 如果字符串中没有带小的数据,无论找到与否都不报错
console.log(`共替换${arr!=null?arr.length:0}处`)
        
// 字符串是不变类型,必须用变量才能接住 var arr=
var arr1= str.replace(/小[\u4e00-\u9fa5]/gi,'**')
console.log(arr1)
console.log(str)
// 数组可变类型,直接用本身接就能接住
var nums=[22,1455,12,1,74]
// sort排序
nums.sort(
  function(a,b){
     return a-b
  }
)
console.log(nums)
        
// 高级替换
// 将每个单词的首字母改成大写
var words='my is xiang qing qing' // \b 第一个位置,i忽略大小写,g全文查找
var w = words.replace(/\b[a-z]/ig,function(keyword){
    // 必须要求,函数带形参、用return回调
    // 根据keyword不同,返回不同的新值
    return keyword.toLocaleUpperCase()
})
console.log(w)

let a = " fsd fds ffsad "
// 函数可以去掉字符串开头的空字符
function ltrim(a){
   return  a.replace(/^\s+/,'')
}
// 函数可以去掉字符串结尾的空字符
function rtrim(a){
   return  a.replace(/\s+$/,'')
}
// 函数可以去掉字符串开头和结尾的空字符,程序默认只找第一个符合条件的词,因此必须加上g
function trim(a){
   return  a.replace(/^\s+|\s+$/g,'')
}
console.log(ltrim(a))
console.log(rtrim(a))
console.log(trim(a))
// ES6 提供了去空格的函数,旧浏览器不兼容的情况,就自己写
console.log(a.trimLeft())
console.log(a.trimRight())
console.log(a.trim())

5、切割

let url="http://localhost:5500/public/index.html?id=5#top"
// shift 提出第一个元素
// 先按://切割,取第0部分
var a1 = url.split('://')
var protocol= a1[0]
// 剩余部分保存再变量b中继续执行后续操作,切割 # 再保存
var b2 = a1[1].split('#')
var toptxt = '#'+b2[1]
// 切割 ? 再保存
var c1 = b2[0].split('?')
var hash = '?'+c1[1]
// 切割 / 再保存
var d1 = c1[0].split('/')
// 将数组第一个元素踢出数组——主机名+端口号
var host = d1.shift()
// 将剩余部分按 / 拼接形成相对路径
var pathName = '/' + d1.join('/')
// 将host再按 :切割,分成主机名和端口号
var ho = host.split(':')
var hostname= ho[0]
var port= ho[1]
console.log(protocol)
console.log(hostname)
console.log(host)
console.log(port)
console.log(pathName)
console.log(toptxt)
console.log(hash)

6、正则表达式解析url,另一种实现方法:零宽断言 

let url1="http://localhost:5500/public/index.html?id=5#top"
let reg =/([a-z]+):\/\/([a-zA-Z0-9.]+):(\d+)((\/[a-z.]+)+)(\?([a-z]+=[a-z0-9]+&?)+)(#[a-z]+)/i
// match可将正则中()中 的值,单独存放在一个变量中
var uarr = url1.match(reg)
var uhttp = uarr[1]
var ups = uarr[2]
var uport = uarr[3]
var upath = uarr[4]
var upathname = uarr[6]
var umd = uarr[8]
console.log(uhttp)
console.log(ups)
console.log(uport)
console.log(upath)
console.log(upathname)
console.log(umd)

7、 自定义指令

<body>
   <div id="app">
      <input v-focus>
      <button>百度一下</button>
    </div>
</body>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
   // 定义指令
   Vue.directive('focus',{
      inserted(donElem){
         donElem.focus()
      }
   })
</script>
<script>
   var vm = new Vue({
      el: '#app',
      data: {}
   })
</script>

    希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值