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

Статус
Закрыто для дальнейших ответов.

KostyaSA

Участник
Сообщения
78
Реакции
17
На языке python у словарей есть такой вариант записи:
dict.setdefault ( name, [] )
создание шаблона по-умолчанию, возможно нечто подобное есть и в яваскрипт
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
потому что в языке нет таких конструкций 'hz' на каждое свойство по строке тратите, а на создание объекта жалко? ':(!!'
да понятно, что проблема не является таки проблемой. просто интересно — возможно ли такое объявление массива.

На языке python у словарей есть такой вариант записи:
dict.setdefault ( name, [] )
создание шаблона по-умолчанию, возможно нечто подобное есть и в яваскрипт
да. именно про это я и спрашиваю :)
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
обращайтесь через обертку, типа там
Код:
Array.prototype.objAtIndex=function(index)
{
if(this[index]==undefined)
this[index]={};
return this[index];
}

наверное, и [] можно перегрузить - но я бы не стал :)
 
  • Спасибо
Реакции: bossrus

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
только количество объектов в массиве — штука совсем непостоянная
Код:
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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
На конкурс извращенных неординарных решений '))'
Код:
function BossArray (N) {
    return eval("new Array("+(N>0?"{}":"")+(N>1?new Array(N).join(",{}"):"")+");");
}

BossArray(3);
 
  • Спасибо
Реакции: bossrus

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
то есть вместо массива произвольного размера предлагается использовать массив фиксированной длины, да еще и сразу забитый объектами (хотя они не факт, что нужны везде)
оптимизация, однако!
 

bossrus

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

Не по теме:
никак не поставлю дома индиз. проверить не могу
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ну а если немного подумать?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
то есть вместо массива произвольного размера предлагается использовать массив фиксированной длины, да еще и сразу забитый объектами (хотя они не факт, что нужны везде)
оптимизация, однако!
Зато, элементом такого массива может undefined быть, а твоего - нет! :4)
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Я до сих пор практической пользы от этих костылей не вижу. Для какой такой задачи такие выкрутасы?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Ну мало ли, хеширование какое-нибудь
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Что-то я никакого отношения к хешам вообще не не наблюдаю. Ближайшая аналогия -- Record из Делфи.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
record в дельфи и прочем паскале весь насквозь фикированный и типизированный
 
Статус
Закрыто для дальнейших ответов.