Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script src="https://wzrd.in/standalone/assert@latest"></script>
  <script src="https://wzrd.in/standalone/lodash.get@latest"></script>
</head>
<body>
</body>
</html>
 
'use strict';
var ugly = {
  a: 'a',
  b: ['b1', 'b2'],
  c: {
    c1: 'c1',
    c2: ['c2a', 'c2b'],
    c3: {
      c3a: 'c3a',
      c3b: [['c3b']],
    },
    c4: [{c4a: 'c4a'}],
  }
};
let simpleObj = {
  propA: {
    propAChildOne: '1',
    propAChildTwo: {
      propAGrandchild: 'hey'
    }
  },
  propB: {
    propBChildOne: '2',
    propBChildTwo: {
      propBGrandchildOne: 'yo',
      propBGrandchildTwo: 'yo yo',
    }
  },
  propC: [
    {
      propCNestedObject: {
        propCNestedObjectPropA: 'hi'
      }
    },
    {
      propCNestedObject: {
        propCNestedObjectPropA: 'hi again'
      }
    }
  ]
};
function isPlainishObject(obj) {
  return Object.prototype.toString.call(obj) === '[object Object]';
}
function getPaths (obj, _paths, _currentPath) {
  _paths = _paths || [];
  if (typeof obj !== 'object') {
    _paths.push(_currentPath);
  } else {
    for (let prop in obj) {
      let path;
      if (isPlainishObject(obj)) {
        path = _currentPath && `${_currentPath}.${prop}` || prop;
      } else {
        path = _currentPath && `${_currentPath}[${prop}]` || prop;
      }
      getPaths(
        obj[prop],
        _paths,
        path
      );
    }
  }
  return _paths;
}
assert.deepEqual(getPaths(simpleObj), [
  'propA.propAChildOne',
  'propA.propAChildTwo.propAGrandchild',
  'propB.propBChildOne',
  'propB.propBChildTwo.propBGrandchildOne',
  'propB.propBChildTwo.propBGrandchildTwo',
  'propC[0].propCNestedObject.propCNestedObjectPropA',
  'propC[1].propCNestedObject.propCNestedObjectPropA'
]);
assert.deepEqual(getPaths(ugly), [
  'a',
  'b[0]',
  'b[1]',
  'c.c1',
  'c.c2[0]',
  'c.c2[1]',
  'c.c3.c3a',
  'c.c3.c3b[0][0]',
  'c.c4[0].c4a',
]);
document.body.textContent = 'Success';
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers