NaturalCycles/js-lib

View on GitHub
src/object/sortObjectDeep.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { _isObject } from '..'

/**
 * based on: https://github.com/IndigoUnited/js-deep-sort-object
 */
export function _sortObjectDeep<T>(o: T): T {
  // array
  if (Array.isArray(o)) {
    return o.map(_sortObjectDeep) as any
  }

  if (_isObject(o)) {
    const out = {} as T

    Object.keys(o)
      .sort((a, b) => a.localeCompare(b))
      .forEach(k => {
        out[k as keyof T] = _sortObjectDeep(o[k as keyof T])
      })

    return out
  }

  return o
}