引用数据类型

100 阅读2分钟

Object类型

new操作符

const a = new A()

相当于

const a = {}
 a.__proto__ = A.prototype
 A.call(a)

实例函数

  1. hasOwnProperty(propertyName) -- 不会检查实例对象原型链上的属性
  2. propertyIsEnumerable(propertyName) -- 是否为实例属性并且是否是可枚举的

静态函数

  1. Object.create()
  2. Object.defineProperties()
  3. Object.getOwnPropertyNames()
  4. Object.keys()

Array类型

判断一个变量是数组还是对象

  • instanceof
  • 判断构造函数
const a = [1,2,3]
a.constructor === Array
a.__proto__.constructor === Array
  • toString()
const a = [1,2,3]
Object.prototype.toString.call(a) // [object Array]
  • Array.isArray()

reduce()方法

reduce()函数的主要作用是做累加处理,即接收一个函数作为累加器,将数组中的每一个元素从左到右一次执行累加器,返回最终的处理结果。

arr.reduce(callback[, initialValue])

callback(accumulator, currentValue, currentIndex, array)
accumulator表示上一次调用累加器的返回值
currentValue表示数组正在处理的值
  1. 求数组每个元素相加的合
  const arr = [1,2,3]
  const sum = arr.reduce((accumulator, currentValue) => { return accumulator + currentValue} , 0)
  1. 统计数组中每个元素出现的次数
  const countOccurrences = (arr) => {
      return arr.reduce((accumulator, currentValue) => {
          accumulator[currentValue] ? accumulator[currentValue]++ : accumulator[currentValue] = 1
          return accumulator
      }, {})
  }

求数组的最大值和最小值

  1. 通过prototype属性拓展min()函数和max()函数
  2. 借助Math对象的min()函数和max()函数
  3. 借助Array类型的reduce()函数
  4. 借助Array类型的sort()函数
  5. 拓展运算符
Math.max(...arr)
Math.min(...arr)

数组遍历方法

  1. for
  2. forEach()
  3. map()
  4. filter()
  5. some() every()
  6. reduce()
  7. find()

数组去重

  1. 数组遍历 - 新建一个数组,对传入的数组进行遍历。
  2. 对象键值对
  3. 先排序,再去重
  4. 优先遍历数组
 function arrayUnique(array) {
   const result = []
   for (let i = 0, l = array.length; i < array.length; i++) {
       for(let j = 0; j < l; j++) {
         if(array[i] === array[j]) {
             j = ++i
         }
       }
       result.push(array[i])
   }
   return result
 }
 

5.reduce()函数

  // 注意数据类型。对于object的key来说, 1和'1'没有区别。最好增加一个type的判断,此处省略。(Map数据类型能避免这个问题)
  function arrayUnique(array) {
    const obj = {}
    return array.reduce((prev, cur) => {
      if(!obj[cur]){
        prev.push(cur)
      }
      return prev
    }, [])
  }
  1. Set数据结构
  Array.from(new Set(array))
  1. Map数据结构
  function arrayUnique(array){
    const map = new Map()
    return array.filter(item => !map.has(item) && map.set(item, 1)
  }

找出数组中出现次数最多的元素

  1. 键值对
  2. reduce()函数
  function findMost(){
    let maxEle = ''
    let maxNum = 1
    const obj = arr.reduce((prev, cur)=>{
      prev[cur] ? prev[cur]++: prev[cur] = 1
      if(prev[cur] > maxNum){
       maxEle = cur
       maxNum++
      }
      return prev
    }, {})
    return {maxEle, maxNum}
  }