Распечатать массив массивов в файле - PullRequest
0 голосов
/ 06 мая 2018

У меня есть такой массив:

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': []}];

Я хочу напечатать этот массив в файле в формате, подобном:

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': 

Важно то, что ясно, какие элементы находятся внутри других.

Как я могу это сделать?

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете использовать рекурсивный подход для генерации требуемого вывода вложенного объекта.

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))

Чтобы получить тот же результат, что и в вашем вопросе:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...