Boris Yankov
Boris Yankov

Reputation: 1540

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?

Upvotes: 2

Views: 7746

Answers (3)

Bart Louwers
Bart Louwers

Reputation: 932

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).

Upvotes: 2

jfriend00
jfriend00

Reputation: 707328

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++;
}

Upvotes: 6

Niko
Niko

Reputation: 26730

That is pretty easy:

var c = { objects: [] };

for (var o in container) {
    var n = o.match(/^object(\d+)$/);
    if (n) c.objects[n[1]] = container[o];
}

Now c is your new container object, where c.object[1] == container.object1

Upvotes: 1

Related Questions