substance
Version:
Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing system. It is developed to power our online editing platform [Substance](http://substance.io).
28 lines (26 loc) • 814 B
JavaScript
import isPlainObject from './isPlainObject'
import isArray from './isArray'
export default function isEqual (a, b) {
if (a === b) return true
if (!a || !b) return false
if (!a.constructor || !b.constructor) return false
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)) {
const akeys = Object.keys(a).sort()
const bkeys = Object.keys(b).sort()
if (!isEqual(akeys, bkeys)) return false
for (let i = 0; i < akeys.length; i++) {
const key = akeys[i]
if (!isEqual(a[key], b[key])) return false
}
return true
}
// at last try loose equality check
return a == b // eslint-disable-line
}