[ID CS3 и ранее] как создать массив объектов

  • Автор темы Автор темы bossrus
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
На языке python у словарей есть такой вариант записи:
dict.setdefault ( name, [] )
создание шаблона по-умолчанию, возможно нечто подобное есть и в яваскрипт
 
потому что в языке нет таких конструкций 'hz' на каждое свойство по строке тратите, а на создание объекта жалко? ':(!!'
да понятно, что проблема не является таки проблемой. просто интересно — возможно ли такое объявление массива.

На языке python у словарей есть такой вариант записи:
dict.setdefault ( name, [] )
создание шаблона по-умолчанию, возможно нечто подобное есть и в яваскрипт
да. именно про это я и спрашиваю :)
 
обращайтесь через обертку, типа там
Код:
Array.prototype.objAtIndex=function(index)
{
if(this[index]==undefined)
this[index]={};
return this[index];
}

наверное, и [] можно перегрузить - но я бы не стал :)
 
  • Спасибо
Реакции: bossrus
только количество объектов в массиве — штука совсем непостоянная
Код:
function BossArray () {
    switch (arguments.length) {
        case 1:
            var arr = new Array();
            for (var i = 0; i < arguments[0]; i++) {
                arr.push({});
            }
            return arr;
        break;
        default:
            return Array.apply(arr, arguments);
        break;
    }
}

var arr = BossArray(4);

arr[0].name = 'test';
arr[0].value = 'passed';

$.writeln(arr[0].toSource());
 
  • Спасибо
Реакции: bossrus, _MBK_ и Skvoznyak
На конкурс извращенных неординарных решений '))'
Код:
function BossArray (N) {
    return eval("new Array("+(N>0?"{}":"")+(N>1?new Array(N).join(",{}"):"")+");");
}

BossArray(3);
 
  • Спасибо
Реакции: bossrus
то есть вместо массива произвольного размера предлагается использовать массив фиксированной длины, да еще и сразу забитый объектами (хотя они не факт, что нужны везде)
оптимизация, однако!
 
пока самое изящное решение:
Код:
Array.prototype.objAtIndex=function(index)
{
if(this[index]==undefined)
this[index]={};
return this[index];
}
только остаётся вопрос — а при добавлении записи простого типа обычным способом вот так:
Код:
var test=[];
test[4]="opa";
— тоже объект будет создаваться? '))')

Не по теме:
никак не поставлю дома индиз. проверить не могу
 
ну а если немного подумать?
 
то есть вместо массива произвольного размера предлагается использовать массив фиксированной длины, да еще и сразу забитый объектами (хотя они не факт, что нужны везде)
оптимизация, однако!
Зато, элементом такого массива может undefined быть, а твоего - нет! :P
 
Я до сих пор практической пользы от этих костылей не вижу. Для какой такой задачи такие выкрутасы?
 
Ну мало ли, хеширование какое-нибудь
 
Что-то я никакого отношения к хешам вообще не не наблюдаю. Ближайшая аналогия -- Record из Делфи.
 
record в дельфи и прочем паскале весь насквозь фикированный и типизированный
 
Статус
Закрыто для дальнейших ответов.