arrayDepth.js 766 B

123456789101112131415161718192021222324252627282930313233
  1. 'use strict';
  2. module.exports = arrayDepth;
  3. function arrayDepth(arr) {
  4. if (!Array.isArray(arr)) {
  5. return { min: 0, max: 0, containsNonArrayItem: true };
  6. }
  7. if (arr.length === 0) {
  8. return { min: 1, max: 1, containsNonArrayItem: false };
  9. }
  10. if (arr.length === 1 && !Array.isArray(arr[0])) {
  11. return { min: 1, max: 1, containsNonArrayItem: false };
  12. }
  13. const res = arrayDepth(arr[0]);
  14. for (let i = 1; i < arr.length; ++i) {
  15. const _res = arrayDepth(arr[i]);
  16. if (_res.min < res.min) {
  17. res.min = _res.min;
  18. }
  19. if (_res.max > res.max) {
  20. res.max = _res.max;
  21. }
  22. res.containsNonArrayItem = res.containsNonArrayItem || _res.containsNonArrayItem;
  23. }
  24. res.min = res.min + 1;
  25. res.max = res.max + 1;
  26. return res;
  27. }