![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 31
|
Привет!
Как облегчить такую конструкцию? // name = 'some.where.in.galactic' // stack:Object {ой блин....} var fragments:Array = name.split('.'); switch (fragments.length) { case 1: return stack[name]; break; case 2: return stack[fragments[0]][fragments[1]]; break; case 3: return stack[fragments[0]][fragments[1]][fragments[2]]; break; case 4: return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]]; break; case 5: return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]][fragments[4]]; break; case 6: return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]][fragments[4]][fragments[5]]; break; } |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 31
|
Приходят данные произвольной структуры, надо с ними работать.
А в AS3 нет средств, позволяющих лаконично написать такой код? Надо сделать сеттер и геттер. Первый получает ключ массива произвольной глубины (land.town.tower.room...) и значение, создает указанный элемент. Второй получает ключ, и возвращает значение по нему. Как указывать на элементы объекта? Страшный сеттер var fragments:Array = name.split('.'); if (fragments.length == 1) { stack[name] = value; } if ((stack[fragments[0]] == undefined) && (fragments.length > 1)) { stack[fragments[0]] = {}; } if ((stack[fragments[1]] == undefined) && (fragments.length > 2)) { stack[fragments[0]][fragments[1]] = {}; } if ((stack[fragments[2]] == undefined) && (fragments.length > 3)) { stack[fragments[0]][fragments[1]][fragments[2]] = {}; } switch (fragments.length) { case 2: stack[fragments[0]][fragments[1]] = value; break; case 3: stack[fragments[0]][fragments[1][fragments[2]] = value; break; case 4: stack[fragments[0]][fragments[1][fragments[2]][fragments[3]] = value; break; } |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 31
|
Хеш. Но вот так не работает:
key = 'one.two.three.four.five'; value = 'Sun'; stack[key] = value; return stack.one.two.three.four.five; // не работает Коллеги, можете проверить? |
|
|||||
|
stack['one.two.three.four.five'] то же самое что и stack[key]
return stack['one.two.three.four.five'] только так. Добавлено через 1 минуту stack.one.two.three.four.five это какой-то динамический ад.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 31
|
one.two.three.four - существует и содержит {a:'A',b:'B'} ?
for each (letter in one.two.three.four) - будет работать? |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Не будет.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|