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

  • Автор темы Автор темы bossrus
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74

Не по теме:
тема не совсем касается именно индизайнов, но раз уж я пишу скрипты для него — буду писать тут.
;)

возможно я просто загнался и торможу, но никак не могу понять примитивную вещь — как создать массив, состоящий из объектов?
пока докопался до варианта присваивания типа каждой строке в массиве, но это как-то похоже на костыль:
Код:
var test=new Array();
test[0]={};
тогда запись вида
Код:
test[0].name="name0";
test[0].path="path0";
test[0].mirror="mirror0";
вполне таки себе работает.
но это как-то странно для яваскрипта объявлять тип каждой строки массива перед работой с этой строкой.
пробовал сделать
Код:
var test=new Array({});
в принципе понятно, что создаётся массив с одной записью типа "object", но автоматически новая строка того же типа уже создаваться не хочет, и на
Код:
test[1].name="name1";
test[1].path="path1";
test[1].mirror="mirror1";
уже выдаёт ошибку, если не сделать
Код:
test[1]={};

куда копать?
 
var test=new Array();
test.push(MyObj);
оно?
 
  • Спасибо
Реакции: similideus и Skvoznyak
var test = [];
можно так для краткости
 
Тогда лучше так:
Код:
var test = [];
test.push({name:"name1",path:"path1",mirror:"mirror1"});
 
Так массив не обязательно должен состоять из однотипных элементов. Пишите туда объекты – будет массив из объектов :)

Код:
function MyObj(name, path, mirror) {
    this.name = name;
    this.path = path;
    this.mirror = mirror;
}

var myArr = {};

myArr[0] = new MyObj("My Name", 123, true);
 
не-не-не.
все предложенные варианты — это просто вариации строки
Код:
test[0]={};
мне кажется нелогичной сама постановка объявления типа строки перед работой с этой строкой.
ведь для того, чтобы сделать
Код:
test[0]="тест";
я не должен сначала говорить, что
Код:
test[0]=String;

смысл моего поста — как объявить массив так, чтобы сразу после объявления начать его заполнять объектами так-же, как с другими типами данных?
можно ли сделать такое объявление массива, чтобы код типа
Код:
var test=new Array();

test[0].name="name0";
test[0].path="path0";
test[0].mirror="mirror0";

test[1].name="name1";
test[1].path="path1";
test[1].mirror="mirror1";
был рабочим?

А, с другой стороны, что мешает сразу инициализировать при создании?
так в этом случае он создаёт массив с 1 строкой типа объект. второй элемент нужно предварительно объявить, прежде чем в нём работать. у меня это описано
 
так в этом случае он создаёт массив с 1 строкой типа объект.
Нифига не понял
В моем примере он создает инициализированный массив с тремя элементами, представляющими собой объекты разных типов
А что еще надо?
 
налицо непонимание.

массив создается пустой, объектов в нем нет. как можно присваивать свойства пустоте? сначала нужно создать объекты
 
Ошибнулся
Код:
var myArr = [];

объявления типа строки
'Строка' – это и есть тип.
ведь для того, чтобы сделать
Код:
test[0]="тест";
я не должен сначала говорить

Вы именно это и говорите, когда заключаете строку в кавычки.
 
До меня, кажется, начинает доходить глубинный смысл поставленной задачи
Топикстартер, наверное, хочет создать неинициализированный массив безразмерной длины?
Так нельзя это
 

Не по теме:
Богатство выбора нас погубит
 
Последнее редактирование:
  • Спасибо
Реакции: bossrus
да просто нет понимания разницы между примитивными типами данных и объектами. хотя мне казалось что ТС с C++ знаком (?)
 
да просто нет понимания разницы между примитивными типами данных и объектами.
А я вообще сути проблемы не понимаю
Написание
test[0].name="name0"; test[0].path="path0"; test[0].mirror="mirror0"; test[1].name="name1"; test[1].path="path1"; test[1].mirror="mirror1";
без инициализации массива идеологически неверно изначально
даже в случае примитивных типов данных
 
так это и не работает
а
test[0]="foo";
и есть инициализация
 
да просто нет понимания разницы между примитивными типами данных и объектами. хотя мне казалось что ТС с C++ знаком (?)
не знаю, откуда вы это знаете, но знаком :D
так это и не работает
а
test[0]="foo";
и есть инициализация
так вот о чём я и говорю. почему при простых типах данных строка инициализуется автоматически, а инициализовать точно также "object" — уже не желает, и ему нужно руками написать, что это вот объект. как будто и так непонятно, что если я пишу точку после индекса — то ничем иным оно быть не может.
Нифига не понял
В моем примере он создает инициализированный массив с тремя элементами, представляющими собой объекты разных типов
А что еще надо?
когда я отвечал на это сообщение — оно не так выглядело :)
 
$.writeln(arr[0].field2)[/CODE]
Код:
var test=new Array({},{});

test[0].name="name0";
test[0].path="path0";
test[0].mirror="mirror0";

test[1].name="name1";
test[1].path="path1";
test[1].mirror="mirror1";
ну да. тоже вариант ручной инициализации. только количество объектов в массиве — штука совсем непостоянная :)
 
почему при простых типах данных строка инициализуется автоматически, а инициализовать точно также "object" — уже не желает

потому что в языке нет таких конструкций 'hz' на каждое свойство по строке тратите, а на создание объекта жалко? ':(!!'
 
Статус
Закрыто для дальнейших ответов.