Это будет зависеть от реализации, но я не думаю, что вам нужно беспокоиться о потраченной памяти для промежуточных индексов.Инструменты разработчика не представляют, как данные обязательно хранятся.
Что касается итерации по ним, да, вы бы итерировали по всему промежуточному, используя цикл for
.
Еслипоследовательный порядок не важен, тогда определенно используйте простой объект вместо массива.И да, вы можете использовать числовые имена для свойств.
var myObjects = {} ;
myObjects["471"] = {foo: "bar"} ;
myObjects["3119"] = {hello: "goodbye"};
Здесь я использовал строки для имен, так как вы сказали, что у вас проблемы с числами.В конечном итоге они в конечном итоге представляются в виде строк.
Теперь вы будете использовать a for-in
выражение для итерации по набору, и вы получите только те свойства, которые вы 'определено.
РЕДАКТИРОВАТЬ:
Что касается console.log()
отображения индексов, которых не должно быть, вот пример того, как легко это сделатьобманным путем заставьте инструменты разработчика думать, что у вас есть массив.
var someObj = {};
someObj.length = 11;
someObj.splice = function(){};
someObj[10] = 'val';
console.log(someObj);
Очевидно, что это объект, но Firebug и инструменты разработчика Chrome отобразят его как массив с 11 членами.
[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "val"]
Итак, вы можете видеть, что консоль не обязательно отражает, как / какие данные на самом деле хранятся.