Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript: convert objects to array of objects

I have thousands of legacy code that stores array information in a non array.

For example:

container.object1 = someobject;
container.object2 = someotherobject;
container.object3 = anotherone;

What I want to have is:

container.objects[1], container.objects[2], container.objects[3] etc.

The 'object' part of the name is constant. The number part is the position it should be in the array.

How do I do this?

like image 573
Boris Yankov Avatar asked Jan 18 '26 20:01

Boris Yankov


2 Answers

Assuming that object1, object2, etc... are sequential (like an array), then you can just iterate through the container object and find all the sequential objectN properties that exist and add them to an array and stop the loop when one is missing.

container.objects = [];  // init empty array
var i = 1;
while (container["object" + i]) {
    container.objects.push(container["object" + i]);
    i++;
}

If you want the first item object1 to be in the [1] spot instead of the more typical [0] spot in the array, then you need to put an empty object into the array's zeroth slot to start with since your example doesn't have an object0 item.

container.objects = [{}];  // init array with first item empty as an empty object
var i = 1;
while (container["object" + i]) {
    container.objects.push(container["object" + i]);
    i++;
}
like image 108
jfriend00 Avatar answered Jan 20 '26 11:01

jfriend00


An alternate way to do this is by using keys.

var unsorted = objectwithobjects;
var keys = Object.keys(unsorted);
var items = [];
for (var j=0; j < keys.length; j++) {
  items[j] = unsorted[keys[j]];
}

You can add an if-statement to check if a key contains 'object' and only add an element to your entry in that case (if 'objectwithobjects' contains other keys you don't want).

like image 21
Bart Louwers Avatar answered Jan 20 '26 11:01

Bart Louwers