Solo
Solo

Reputation: 6977

When to use object and when array

I have an situation where I have 3 different arrays with very different amounts of objects in it. I've read many questions and blog posts about this but Im still unsure when to use what.

PS! My biggest problem is that I need to iterate and push (perfect for arrays), also find if exists in array and delete (more suitable for objects). Specific order is not required.

I can't allow having same object in both array1 and array1clicked because they should perform different actions.


When it's best to use object and when array in my example? What should I replace with object and what should stay as array? Im pretty sure that amounts of objects in it also matters, right?


My current code:

//Objects in arrays are literally custom {objects} with custom prototypes and html
var array1 = [ 20 objects ];
var array1clicked = [];

var array2 = [ 250 objects ];
var array2clicked = [];

var array3 = [ 50 000 objects ];
var array3clicked = [];

//Each object in arrays has event attached
objecthtml.click(function() {
    //Add to clicked array
    array1clicked.push(thisobject);
    //Remove from initial array
    var index = array1.indexOf(thisobject);
    if (index > -1) {
        array1.splice(index, 1);
    }
}
//Same with array2 and array3 objects


//Iterations on different conditions
var array1count = array1.length;
var array1clickedcount = array1clicked.length;

//Same with array2 and array3

if(condition1) {
   for(a = 0; a < array1count; a++) {
       array1[a].div.style.visibility = 'hidden';
   }
   //Same with array2 and array3 objects

   for(a = 0; a < array1clickedcount; a++) {
       array1clicked[a].div.style.visibility = 'visible';
   }
   //Same with array2clicked and array3clicked objects
}
else if(condition2) {
   for(a = 0; a < array1count; a++) {
       array1[a].div.style.visibility = 'visible';
   }
   //Same with array2 and array3 objects

   for(a = 0; a < array1clickedcount; a++) {
       array1clicked[a].div.style.visibility = 'hidden';
   }
   //Same with array2clicked and array3clicked objects
}

Upvotes: 4

Views: 145

Answers (2)

Chilipote
Chilipote

Reputation: 1067

In your case, I think you have to use just Array.

In common case, you could use object to keep references and push some values into it, but If you wanna iterate on this, I think you have to use Array.

Upvotes: 0

Oriol
Oriol

Reputation: 288680

It seems you want a data structure with these operations:

  • Iteration
  • Insert
  • Delete
  • Search

With arrays, the problem is that searches and deletions (with reindexing) are slow.

With objects, the problem is that the property names can only be strings.

The perfect structure is a set.

var s = new Set();
s.add(123); // insert
s.has(123); // search
s.delete(123); // delete
s.values(); // iterator

Upvotes: 6

Related Questions