1

I have an array like that:

var ex = [{'id': 10, 'name': 'b', 'r': ['bill', 'ben']},
            {'id': 12, 'name': 'c', 'r': ['carl']},
            {'id': 4, 'name': 'a', 'r': ['alan', 'alexander', 'alexis']},
            {'id': 14, 'name': 'z', 'r': []}];

I want to print this array in a file in a format like:

0: 'id': 10, 
   'name': 'b', 
   'r': 
       0: 'bill', 
       1: 'ben',
1: 'id': 12, 
    'name': 'c', 
    'r': 
       0: 'carl',
2: 'id': 4, 
   'name': 'a', 
   'r': 
       0: 'alan', 
       1: 'alexander', 
       2: 'alexis',
3: 'id': 14, 
    'name': 'z', 
    'r': 

The important thing is that it is clear what elements are within which others.

How can I do that?

Moti Korets
  • 3,738
  • 2
  • 26
  • 35

1 Answers1

1

You can use a recursive approach to generate the required output of a nested object.

function printObject(obj, prefix = '', space = '\t') {
  // iterate over all keys of the object(array is also an object)
  return Object.keys(obj).map(function(k) {
    // if nested property is object then recursively call the function
    if (typeof obj[k] === 'object')
      return prefix + k + ' : \n' + printObject(obj[k], prefix + space, space);
    // else print the value with the key
    else
      return prefix + k + ' : ' + obj[k];
  // finally join all the values with new line character
  }).join('\n');
}

function printObject(obj, prefix = '', space = '\t') {
  return Object.keys(obj).map(function(k) {
    if (typeof obj[k] === 'object')
      return prefix + k + ' : \n' + printObject(obj[k], prefix + space, space);
    else
      return prefix + k + ' : ' + obj[k];
  }).join('\n');
}



var ex = [{
    'id': 10,
    'name': 'b',
    'r': ['bill', 'ben']
  },
  {
    'id': 12,
    'name': 'c',
    'r': ['carl']
  },
  {
    'id': 4,
    'name': 'a',
    'r': ['alan', 'alexander', 'alexis']
  },
  {
    'id': 14,
    'name': 'z',
    'r': []
  }
];

console.log(printObject(ex))

To get the same output as in your question :

function printObject(obj, prefix = '', space = '\t') {
  return Object.keys(obj).map(function(k, i) {
    if (typeof obj[k] === 'object')
      return prefix + k + ' : ' + printObject(obj[k], prefix + space, space);
    else
      return (i ? prefix : prefix.replace(space,'')) + k + ' : ' + obj[k];
  }).join('\n');
}



var ex = [{
    'id': 10,
    'name': 'b',
    'r': ['bill', 'ben']
  },
  {
    'id': 12,
    'name': 'c',
    'r': ['carl']
  },
  {
    'id': 4,
    'name': 'a',
    'r': ['alan', 'alexander', 'alexis']
  },
  {
    'id': 14,
    'name': 'z',
    'r': []
  }
];

console.log(printObject(ex))
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188