Преобразовать объект с ключами в массив объектов в JavaScript

Я столкнулся с проблемой при попытке конвертировать объект с ключами в массив объектов в JavaScript

Каков наилучший способ преобразовать входной объект, чтобы он напоминал структуру массива требуемого выхода?

const routes = {
    Home: {
        screen: HomeScene,
        path: '/'
    },
    About: {
        screen: AboutScreen,
        path: '/about'
    }
};

const output_routes = 
[{
    component: Layout,
    routes: [{
        path: '/',
        exact: true,
        component: HomeScene,
    },
    {
        path: '/about',
        exact: true,
        component: AboutScreen,
    }],
}];

2 ответа

Функция Object.keys() отлично подходит для чего-то подобного.

Попробуйте это:

function toArray(obj) {
  return Object.keys(obj).map(function(key) {
    return obj[key];
  });
}

или ES6:

const toArray = (obj) => Object.keys(obj).map(key => obj[key]);

Что должно дать вам:

[
   { screen: HomeScene, path: '/' },
   { screen: AboutScreen, path: '/about' } 
]

Я смог реализовать, как показано ниже. Это помогает мне использовать один и тот же объект маршрута и для response-navigation, и response-routerv4, который я использую в своем приложении act-native-web.

const ROUTES = {
    Home: {
        screen: 'HomeScene',
        path: '/'
    },
    About: {
        screen: 'AboutScreen',
        path: '/about'
    }
};

//const toArray = (ROUTES) => Object.keys(ROUTES).map(key => ROUTES[key]);
const routes_new = Object.keys(ROUTES).map((routeName,idx)=> {
const { screen: Screen, path } = ROUTES[routeName]; 
const routeProps = 
      {
                path,
                component: Screen,
                key: idx,
                exact: true
            }; 
  return routeProps

})

routes_server = [];
routes_server.push({
        component:'Layout',
    });

routes_new.push({component: 'NotFoundScene'})
routes_server.push({routes:routes_new})
console.log(routes_server);
Другие вопросы по тегам