I'd like to dig this older thread up again with some improvement suggestions.
Right now, your array format is [ [object, ["prop",value], ["prop",value], ["prop",value]] , [object,...] ]
I think you could improve this by creating an a bit different array structure. You would have one array containing all the objects, and another one containing arrays of properties and values.
[Objects, [ [Properties,Values], [Properties,Values], [Properties,Values] ]
or, written more codewise
[ [object1, object2, object3],[ [ ["prop1","prop2","prop3",...], [value1, value2, value3,...] ] , [ ["prop1_1","prop1_2","prop1_3",...], [value1_1, value1_2, value1_3,...] ] ] ]
This way you could speed up the setting process, as you would simply have to check if the object is in the objects array (using 'in') instead of running through the whole big array. The same counts for the single properties: Instead of loading an array, checking if the first element is the searched property, loading the next one, checking again a.s.o. only to find in the worst case, that the property doesn't exist yet (after having checked 20 others), you simply type if (_prop in _properties). If not, you push the new property and value on the according arrays and get the hell out of there. Else you can still do some looping.
If you have problems with the size of the arrays, you could even split into three arrays, one for the objects, one for the properties and one for the values.
I hope this helped a bit.