Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как переименовать свойство объекта? (https://javascript.ru/forum/events/32639-kak-pereimenovat-svojjstvo-obekta.html)

Маэстро 24.10.2012 17:17

Цитата:

Сообщение от trikadin (Сообщение 211989)
строки, в отличие от объектов - примитивные типы, и вот они как раз-таки копируются заново.

Хорошо, напишу, где я допустил неточность. В фразе "Но вместо 'mama' и 'papa' в данных свойствах могут храниться другие многомегабайтные объекты." имелось ввиду не JS-объекты, а "информационные объекты", коими могут быть и js-строки. Я НЕ знаю заранее, что там может быть. А если там будут строки длиной 2 гигабайта? Они будут копироваться заново?
-Думаю, что да. А Вы?

P.S. можно, конечно, перед присвоением свойств объекту все примитивные типы еще погружать в объекты-оболочки, чтобы такие объекты копировались уже по ссылке... но не масло ли масляное?

Маэстро 24.10.2012 17:23

Цитата:

Сообщение от Dim@
мдаа залёт конечно такой бред нести, ну ладно:

Что за дурацкая привычка сразу свистеть? бред... залет... Вы на первом году службы в армии, или в цирке? Зачем цепляться к одному слову? По существу топика можете что-то сказать?
Я написал о двух проблемах в топике. Первую обсудили (будем так считать ). А что делать со второй?
У меня есть своё решение с помощью создания второй копии массива m2={}, но оно мне не нравится по потреблению ресурсов (в какое-то время будет существовать две копии боольших массивов), поэтому хотелось бы услышать мнение профессионалов по более изящному варианту решения.

trikadin 24.10.2012 17:58

Цитата:

Сообщение от Маэстро
можно, конечно, перед присвоением свойств объекту все примитивные типы еще погружать в объекты-оболочки, чтобы такие объекты копировались уже по ссылке...

Если у вас будут храниться многомегабайтные строки (например, картинки) - то это вполне хороший выход.

melky 24.10.2012 18:02

Цитата:

Сообщение от Маэстро
-Думаю, что да. А Вы?

что мешает перевести примитив в объектное представление?

Маэстро 24.10.2012 18:10

Цитата:

Сообщение от melky (Сообщение 212010)
что мешает перевести примитив в объектное представление?

Категорически ничего не мешает. Просто чтобы перевезти доски мы используем грузовик (грузим их в кузов), а чтобы перевезти грузовик, мы используем... опять грузовик! (грузим грузовик в грузовик).
Ну да черт с ним. А по вопросу сортировки свойств в объекте можете что-то подсказать?
Хотя, идеально было бы делать то, что я назвал "переименованием" свойств объекта. Знаю, что все имена (названия свойств) - это хэш-массив. Как туда добраться? Есть способ?

melky 24.10.2012 18:23

Цитата:

Сообщение от Маэстро
чтобы перевезти доски мы используем грузовик (грузим их в кузов), а чтобы перевезти грузовик, мы используем... опять грузовик! (грузим грузовик в грузовик).

ошибаетесь - мы не грузим их в кузов, а делаем точно такие же доски, загружаем их в кузов, а старые выкидываем.

может, всё-таки поясните, зачем нужен сей велосипед и супер сила?

Маэстро 24.10.2012 18:40

Цитата:

Сообщение от melky (Сообщение 212020)
ошибаетесь - мы не грузим их в кузов, а делаем точно такие же доски, загружаем их в кузов, а старые выкидываем.

Ну почему же я ошибаюсь? Масло масляное-то ведь не в досках, а в грузовиках, то есть в объектах, которые тоже придется заключать в объекты, т.к. заранее не известно что везём. Следуя Вашей аналогии получается так:
мы не грузим их (грузовики) в кузов, а делаем точно такие же грузовики, загружаем их в кузов, а старые (грузовики) выкидываем.
-во как ;)

Цитата:

может, всё-таки поясните, зачем нужен сей велосипед и супер сила?
Ну что тут пояснять, я же вроде написал в начале:
есть js-объект m, содержащий другие js-объекты (с черти-каким содержимым - там некие структуры и шифрованные данные). Назовем их "контейнеры".
Все свойства объекта m нумеруются (обзываются) натуральными числами от 0 до nn=10000. Этим свойствам присвоены контейнеры.
Требуется удалить любое свойство n при этом все остальные свойства от n+1 до nn должны сдвинуться в сторону меньших номеров.
n+1 должно стать на место n, n+2 должно стать на место n+1 и т.д.

Dim@ 24.10.2012 20:55

Маэстро,
юзайте массивы и будет вам счастье ;)

Маэстро 24.10.2012 21:10

Цитата:

Сообщение от Dim@ (Сообщение 212042)
Маэстро,
юзайте массивы и будет вам счастье ;)

Ваш совет равносилен например такому: напишите программу на Delphi и будет вам счастье!
Я же говорил, что у меня не массив, а объект. И заменить его на массив я не могу. Только не спрашивайте почему - не уводите дискуссию в сторону. А то, что сортировка в разных браузерах хеша ключей разная - это тоже МОЯ проблема? Кстати, сортировку по возрастанию в Хроме даже осуждают! http://habrahabr.ru/qa/3749/
Вот только интересно, кто победит? Те, кто осуждают, или компания Гугл?

melky 24.10.2012 21:47

Заимстоввание методов не пробовали?

var myObj = {

    "0": "0",
    "1": "1",
    "2": "2",
    "3": "3",
    
    "length": 4
};

alert( myObj["2"] ); // 2

Array.prototype.splice.call(myObj, 2, 1);

alert( myObj["2"] ); // 3


Если и это не подходит, значит, придётся реализовывать своюь структуру данных, где выборка по ключу будет O(1), и в которой так же можно будет менять ключ.

мне кажется, что это будет трудно, посему желаю вам удачи.


вообще, такая структура данных у правил в CSS таблицах :
http://javascript.ru/forum/misc/2680...kom-liste.html
я с этим сталкивался уже.

в принципе, можно глянуть в исходниках на Java, как они сделали эти списки, и так же сделать на JS - это как вариант.


Часовой пояс GMT +3, время: 01:26.