码农之家

js常用方法总结

数组去重

双FOR循环

for (let i = 0; i < arr.length - 1; i++) {
  let item = arr[i]
  for (let j = i + 1; j < arr.length; j++){
    if(item === arr[j]){
      // 用最后一项替代当前项
      arr[i] = arr[arr.length - 1]
      // 最后一项删掉
      arr.length--
      // 下一轮还和这一项比
      j--
    }
  }
}

缺点

对象的键值对

let obj = {}
for (let i = 0; i < arr.length; i++) {
  // 把每一次循环得到的当前项,作为对象的属性名和属性值存储进去
  let item = arr[i]
  if(obj[item] !== undefined){
    // 证明对象中有这个属性
    arr[i] = arr[arr.length - 1]
    arr.length--
    i--
    continue
  }
  obj[item] = item
}

优点

缺点

indexOf检测方式

let newAry = []
for (let i = 0; i < arr.length; i++) {
  let item = arr[i]
  if(newAry.indexOf(item) == -1){
    newAry.push(item)
  }
}

缺点

时间格式化

(proto =>{
  function formatTime(template = '{0}年{1}月{2}日 {3}时{4}分{5}秒') {
    let arr = this.match(/\d+/g)
    return template.replace(/\{(\d+)\}/g, (_, n) => {
      let item = arr[n] || '0'
      item.length < 2 ? item = '0' + item : null
      return item
    })
  }
  proto.formatTime = formatTime
})(String.prototype)

let time = '2020-1-1 11:11:11'
time.formatTime() // 2020年01月01日 11时11分11秒
time.formatTime('{1}-{2} {3}:{4}') // 01-01 11:11
time.formatTime('{0}年{1}月{2}日') // 2020年01月01日 

获取DOM标签的方式

document.getElementById

[context].getElementsByTagName、[context].getElementsByClassName

document.getElementsByName

获取DOM节点的方式

节点类型

类型nodeTypenodeNamenodeValue
文档节点9#documentnull
元素节点1大写标签名null
文本节点3#text文本内容
注释节点8#comment注释内容

属性

设置DOM元素自定义属性

[元素].xxx = xxx / 元素[xxx] = xxx

获取:[元素].xxx

删除:delete [元素].xxx

原理:操作堆内存

[元素].setAttribute(‘xxx’, xxx)

获取:[元素].getAttribute(‘xxx’)

删除:[元素].removeAttribute(‘xxx’)

原理:操作DOM结构

操作DOM元素样式