all files / util/ isEqual.js

100% Statements 21/21
100% Branches 18/18
100% Functions 1/1
100% Lines 16/16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25      323× 80× 48× 46× 68×   36×   32× 18× 18× 18× 17× 26× 26×   12×   14×    
import isPlainObject from './isPlainObject'
import isArray from './isArray'
 
export default function isEqual(a, b) {
  if (a === b) return true
  if (isArray(a) && isArray(b)) {
    if (a.length !== b.length) return false
    for (let i = 0; i < a.length; i++) {
      if (!isEqual(a[i], b[i])) return false
    }
    return true
  }
  if (isPlainObject(a) && isPlainObject(b)) {
    let akeys = Object.keys(a).sort()
    let bkeys = Object.keys(b).sort()
    if (!isEqual(akeys, bkeys)) return false
    for (let i = 0; i < akeys.length; i++) {
      let key = akeys[i]
      if (!isEqual(a[key], b[key])) return false
    }
    return true
  }
  return false
}