Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 163x 15x 14x 14x 37x 14x 163x 270x 155x 155x 155x 10x 145x 145x 145x 3x 142x 142x 142x 21x 121x 121x 121x 38x 33x 33x 33x 2x 31x 40x 40x 40x 13x 101x 163x 72x | import { isArray, isDate, isObject, isSymbol } from './' function looseCompareArrays(a: any[], b: any[]) { if (a.length !== b.length) return false let equal = true for (let i = 0; equal && i < a.length; i++) { equal = looseEqual(a[i], b[i]) } return equal } export function looseEqual(a: any, b: any): boolean { if (a === b) return true let aValidType = isDate(a) let bValidType = isDate(b) if (aValidType || bValidType) { return aValidType && bValidType ? a.getTime() === b.getTime() : false } aValidType = isSymbol(a) bValidType = isSymbol(b) if (aValidType || bValidType) { return a === b } aValidType = isArray(a) bValidType = isArray(b) if (aValidType || bValidType) { return aValidType && bValidType ? looseCompareArrays(a, b) : false } aValidType = isObject(a) bValidType = isObject(b) if (aValidType || bValidType) { /* istanbul ignore if: this if will probably never be called */ if (!aValidType || !bValidType) { return false } const aKeysCount = Object.keys(a).length const bKeysCount = Object.keys(b).length if (aKeysCount !== bKeysCount) { return false } for (const key in a) { const aHasKey = a.hasOwnProperty(key) const bHasKey = b.hasOwnProperty(key) if ( (aHasKey && !bHasKey) || (!aHasKey && bHasKey) || !looseEqual(a[key], b[key]) ) { return false } } } return String(a) === String(b) } export function looseIndexOf(arr: any[], val: any): number { return arr.findIndex(item => looseEqual(item, val)) } |