Преобразовать объект в массив массивов

Створи функцію getRobotSchema, яка приймає об'єкт robot і повертає набір ключів і типи значень, які в них мають зберігатися. Результат має виглядати ось так: [[key, type], [key, type]...]

Приклад:

  const robot = {
    version: 16,
    name: 'Cleaner 3000',
    coords: [345, 12],
  };

  getRobotSchema(robot) === [['version', 'number'], ['name', 'string'], ['coords', 'object']]

Пока дорешала вот до этого момента, но он выводит в консоль только одно последнее значение массива, а остальные два выводит как null

function getRobotSchema(robot) {
   const robotLength = Object.keys(robot).length;
   const typeRobot = Array(robotLength);

  //console.log(typeRobot.length);

  for (const i = 0; i < typeRobot.length; i++) {
    for (const key in robot) {
      console.log(key);
      console.log(typeof robot[key]);
      typeRobot[i] = [key, typeof robot[key]];
    }

     return typeRobot;
  }

Ответы (1 шт):

Автор решения: Roman

Можно сделать все гораздо проще, а именно использовать метод Object.entries, который вернет уже почти нужный результат.

То что будет после Object.entries(robot) :

[['version', 16], ['name', "Cleaner 3000"], ['coords', [345, 12]]]

Используем map чтобы преобразовать получившийся массив:

  1. Всего будет три итерации в map, так как в массиве три элемента(элементы перебираемого массива в данном случае тоже массивы)

  2. Если использовать map таким образом: entries.map(arr => ), то на каждой итерации в arr будет последовательно лежать следующие массивы

    1-я итерация: ['version', 16]
    
    2-я итерация: ['name', "Cleaner 3000"]
    
    3-я итерация: ['coords', [345, 12]]
    
  3. Но чтобы добраться до внутренностей массива используем деструктуризацию: ([key,value]). Теперь map выглядит таким образом entries.map(([key,value]) => и теперь на каждой итерации

в key будет:

  1-я итерация: 'version'

  2-я итерация: 'name'

  3-я итерация: 'coords'

в value:

  1-я итерация: 16

  2-я итерация: "Cleaner 3000"

  3-я итерация: [345, 12]

Останется только изменить значения value на typeof(value), а key оставить без изменений, поэтому из map возвращаем следующий массив [key, typeof(value)]

function getRobotSchema(robot) {
    const entries = Object.entries(robot)
    return entries.map(([key,value]) => [key, typeof(value)])
}

const robot = {
  version: 16,
  name: 'Cleaner 3000',
  coords: [345, 12],
}

console.log(getRobotSchema(robot))

→ Ссылка