Nick Div
Nick Div

Reputation: 5628

How to convert object containing Objects into array of objects

This is my Object

var data = {
    a:{"0": "1"},
    b:{"1": "2"},
    c:{"2": "3"},
    d:{"3": "4"}
};

This is the output that I expect

data = [ 
    {"0": "1"},
    {"1": "2"},
    {"2": "3"},
    {"3": "4"}
]

Upvotes: 108

Views: 160921

Answers (12)

Mirza Hayat
Mirza Hayat

Reputation: 402

Easy Hack

  var data = {
        a:{"0": "1"},
        b:{"1": "2"},
        c:{"2": "3"},
        d:{"3": "4"}
    };

 data = Object.values(data).map((item)=>item)
console.log(data)

Upvotes: 1

KARTHIKEYAN.A
KARTHIKEYAN.A

Reputation: 20088

We can use Object default methods (Object.assign(), Object.values()) to convert Object of Object to array in the following way

const ObjValue = {
a:{"0": "1"},
b:{"1": "2"},
c:{"2": "3"},
d:{"3": "4"}
}
const ObjtoArray = (obj) => Object.assign([], Object.values(obj))

console.log(ObjtoArray(ObjValue))

Upvotes: 0

Gourav
Gourav

Reputation: 41

Finally, It works for me to convert from object to array of objects when you get object value from

       const snapshortObject = snapshot.val(); //  And they look like this are stored value.

  let snapshortObject = {
      a: { 
            message: "Hiiii",
            senderId: "tQusPaBhoJXcu2ezlsDxQMUTLCq1",
            timestamp: "Wed Jun  8 18:16:18 2022"
      },
      b: { 
            message: "Hiiii",
            senderId: "tQusPaBhoJXcu2ezlsDxQMUTLCq1",
            timestamp: "Wed Jun  8 18:16:18 2022"
      },
      c: { 
            message: "Hello 👋👋👋👋",
            senderId: "tQusPaBhoJXcu2ezlsDxQMUTLCq1",
            timestamp: "Wed Jun  8 18:16:50 2022"
      },
      d: { 
            message: "Hello 👋👋👋👋",
            senderId: "tQusPaBhoJXcu2ezlsDxQMUTLCq1",
            timestamp: "Wed Jun  8 18:16:50 2022"
      }
    };
    
    const mappedDataArray = [];
    slno=1
    for (const key in snapshortObject) {
      const mappedData = {
        ...snapshortObject[key],
        slno:slno++
      };
      mappedDataArray.push(mappedData);
    }
    console.log(mappedDataArray);

1

Upvotes: 1

Thierry
Thierry

Reputation: 1676

This works for me

var newArrayDataOfOjbect = Object.values(data)

In additional if you have key - value object try:

const objOfObjs = {
   "one": {"id": 3},
   "two": {"id": 4},
};

const arrayOfObj = Object.entries(objOfObjs).map((e) => ( { [e[0]]: e[1] } ));

will return:

[
  {
    "one": {
      "id": 3
    }
  },
  {
    "two": {
      "id": 4
    }
  }
]

Upvotes: 142

Bisma Azher
Bisma Azher

Reputation: 749

You can easily do this by using Object.values() function

var data = {
    a:{"0": "1"},
    b:{"1": "2"},
    c:{"2": "3"},
    d:{"3": "4"}
};

console.log(Object.values(data))

Upvotes: 8

Junaid Khan
Junaid Khan

Reputation: 59

this is simple and will do in an immutable way so that your main data not touched but you can create a new mappedData as per your requirement and create a new array.

let data = {
  a: { "0": "1" },
  b: { "1": "2" },
  c: { "2": "3" },
  d: { "3": "4" }
};

const mappedDataArray = [];

for (const key in data) {
  const mappedData = {
    ...data[key]
  };
  mappedDataArray.push(mappedData);
}

console.log(mappedDataArray);
console.log(data);

Upvotes: 2

Matt Weber
Matt Weber

Reputation: 2868

The accepted answer doesn't take into account the OP wanted to get rid of the keys. This returns only the objects, not their parent key.

Object.entries(ObjOfObjs).map(e => e[1]) outputs:

[ 
  {"0": "1"},
  {"1": "2"},
  {"2": "3"},
  {"3": "4"}
]

Upvotes: 11

Omar
Omar

Reputation: 3040

This worked for me. And it seems to be well supported.

toArray(obj_obj) {
    return Object.keys(obj_obj).map(i => obj_obj[i]);
}

https://medium.com/chrisburgin/javascript-converting-an-object-to-an-array-94b030a1604c

Upvotes: 0

Shuwei
Shuwei

Reputation: 791

var data = {
    a:{"0": "1"},
    b:{"1": "2"},
    c:{"2": "3"},
    d:{"3": "4"}
};

var myData = Object.keys(data).map(key => {
    return data[key];
})

This works for me

Upvotes: 56

Ashitosh birajdar
Ashitosh birajdar

Reputation: 470

I get what you want ! Here is your solution,

var dataObject=[{name:'SrNo',type:'number'}];

And to access or store the array use

dataObject[0].srno=1;
dataObject[0].srno=2;

Hope this is what you needed.

Upvotes: 0

frogatto
frogatto

Reputation: 29285

var array = [];
for(var item in data){
    // this condition is required to prevent moving forward to prototype chain
    if(data.hasOwnProperty(item)){
        array.push(data[item]);
    } 
}

Upvotes: 1

mags
mags

Reputation: 630

You would have to give a name to each value in the object.

Once you fix the first object, then you can do it using push.

var data = {
    1: {"0": "1"},
    2: {"1": "2"},
    3 : {"2": "3"},
    4: {"3": "4"}
};

var ar = [];
for(item in data){
    ar.push(data[item]);
 }

console.log(ar);

http://jsfiddle.net/nhmaggiej/uobrfke6/

Upvotes: 5

Related Questions