TransWikia.com

Create new object from array

Stack Overflow Asked by alar on December 18, 2021

I’m trying to create new object with different properties name from Array.

Array is:

profiles: Array(1)
   0:
    column:
        name: "profileName"
        title: "Profile name"
    status: "Active"

I want to create new function that return object with two properties:

id: ‘profileName’,
profileStatus: ‘Active’

The function that I have create is returning only one property as undefined undefined=undefined.

function getProfile(profiles) {
    if (!profiles.length) return undefined;

    return profiles.reduce((obj, profile) => {
        console.log('profiles', profile);
        return ({
          ...obj,
          id: profile.column.name,
          profileStatus: profile.status,
        });
      }, {});
}

The function getProfile is taking as input array ‘profiles’ from outside,

3 Answers

Whenever I use reduce in this way, I usually index the final object by some sort of an id. As noted in another answer, you could use map in this situation as well. If you really want your final data structure to be an object, however, you could do something like this:

/**
 * returns object indexed by profile id
 */
const formatProfiles = (profiles) => {
  return profiles.reduce((obj, profile) => {
    return {
      ...obj,
      [profile.id]: {
        id: profile.column.name,
        profileStatus: profile.status,
      }
    };
  }, {});
};

const profiles = [
  {
    id: 0,
    status: 'active',
    column: {
      name: "profile_name_1",
      title: "profile_title_1",
    },
  },
  {
    id: 1,
    status: 'inactive',
    column: {
      name: "profile_name_2",
      title: "profile_title_2",
    }
  }
];

const result = formatProfiles(profiles);

/**
 * Result would look like this:
 */
// {
//   '0': { id: 'profile_name_1', profileStatus: 'active' },
//   '1': { id: 'profile_name_2', profileStatus: 'inactive' }
// }

Answered by sammyteahan on December 18, 2021

I've just tested here and this seems to be working actually

const getProfile1 = (p) => p.reduce((obj, profile) =>({
    ...obj,
    id: profile.column.name,
    profileStatus: profile.status,
}), {});

Answered by Gabriel Donadel Dall'Agnol on December 18, 2021

You can use map as an alternative.

var profiles = [{"column":{"name": "profileName3","title": "3Profile name"},"status": "Active"},{"column":{"name": "profileName","title": "Profile name"},"status": "Active"}];

function getProfile(profiles) {
    if (!profiles.length) return undefined;
    return profiles.map(function(profile,v){
      return {id:profile.column.name,profileStatus: profile.status};
   });

}

console.log(getProfile(profiles));

Answered by imvain2 on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP