85

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"}
]
Nick Div
  • 4,904
  • 9
  • 60
  • 116
  • Then see my comment about the target structure. It's a bad output format and a pain to use in javascript. Why not just put all key/value pairs in a single object? – jfriend00 Nov 07 '14 at 06:54
  • I am using a third party library in my application that needs the input in the format that i want. cant help it. – Nick Div Nov 07 '14 at 06:55
  • 2
    Wow, these comments make my head hurt. How is an array of objects "a pain to use in javascript"? Granted the objects are normally all the same structure, but we use arrays of objects all the time, quite painlessly. – iGanja Oct 31 '17 at 17:07

9 Answers9

116

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
    }
  }
]
itsazzad
  • 6,416
  • 7
  • 67
  • 81
Thierry
  • 1,407
  • 1
  • 12
  • 9
50
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

Shuwei
  • 699
  • 6
  • 7
9

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"}
]
Matt Weber
  • 2,628
  • 2
  • 10
  • 28
5

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/

mags
  • 560
  • 1
  • 7
  • 23
  • I was thinking if there was another way rather than looping the whole Object. Because I have like a thousand records. But if there is nothing else that will work then I can use this. Thanks.. – Nick Div Nov 07 '14 at 06:57
2

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

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))
bisma
  • 551
  • 6
  • 9
0
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]);
    } 
}
frogatto
  • 27,475
  • 10
  • 76
  • 119
0

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.

frogatto
  • 27,475
  • 10
  • 76
  • 119
0

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

Omar
  • 2,494
  • 2
  • 28
  • 54