dc0087
dc0087

Reputation: 87

Convert javascript object to array of individual objects

I have the following object:

{English: 4, Math: 5, CompSci: 6}

How can I convert it to an array of objects, like:

[{English: 4}, {Math: 5}, {CompSci: 6}]

Can't find the answer anywhere. Thanks!!

Upvotes: 6

Views: 4382

Answers (6)

CherryDT
CherryDT

Reputation: 29092

You can turn the object into an array of key-value pairs using Object.entries and then map this array to smaller object created using Object.fromEntries from each individual key-value pair (the key part here is the wrapping in another array before passing to fromEntries):

Object.entries(obj).map(e => Object.fromEntries([e]))

The reverse way is similar: We create a big object using Object.fromEntries, and we pass in an array of key-value pairs. This array is created by flat-mapping (i.e. eliminating on extra layer of arrays) the array of objects to an array of key-value pairs we get from calling Object.entries on each small object. The key here is the flat-mapping, without it we would get an array of arrays of key-value pairs because we added that extra layer in the other conversion to separate the properties.

Object.fromEntries(arr.flatMap(o => Object.entries(o)))

Upvotes: 0

Nina Scholz
Nina Scholz

Reputation: 386881

With newer JS, you could take Object.entries and map single properties.

var object = { English: 4, Math: 5, CompSci: 6 },
    array = Object.entries(object).map(([k, v]) => ({ [k]: v }));

console.log(array);

Upvotes: 7

Jack jdeoel
Jack jdeoel

Reputation: 4584

you can directly assign object by {} but you must use [] quote for key value if not that will not worked

 var obj = {English: 4, Math: 5, CompSci: 6};
 var n_obj = [];
 for(var i in obj){
    n_obj.push({[i]:obj[i]});
 }
 console.log(n_obj);

Upvotes: 0

guest271314
guest271314

Reputation: 1

You can use JSON.stringify(), String.prototype.match() with RegExp /".*"\:.*(?=,|})/, String.prototype.split() with RegExp /,/, Array.prototype.join() with parameter "},{", JSON.parse()

var obj = {English: 4, Math: 5, CompSci: 6};
var res = JSON.parse("[{" 
          + JSON.stringify(obj)
            .match(/".*"\:.*(?=,|})/g)[0]
            .split(/,/)
            .join("},{") 
          + "}]");
console.log(res);

Upvotes: -1

Rayon
Rayon

Reputation: 36609

Use Array#forEach over Object.keys(YOUR_OBJECT)

var input = {
  English: 4,
  Math: 5,
  CompSci: 6
};
var op = [];
Object.keys(input).forEach(function(key) {
  var obj = {};
  obj[key] = input[key];
  op.push(obj); //push newly created object in `op`array
});
console.log(op);

Upvotes: 11

wot
wot

Reputation: 845

Just loop over each of the keys in the object.

var oldObject = {English: 4, Math: 5, CompSci: 6};
var newArray = [];

// Loop over each key in the object
for (var key in oldObject) {
    // Create a temp object
    var temp = {};
    
    // Set the key of temp
    temp[key] = oldObject[key]

    // Push it to the array
    newArray.push(temp);
}

console.log(newArray)

Upvotes: 2

Related Questions