Сообщение от Slavenin
|
перезаписываете, удаляете
|
Это я уже пробовал. Поэтому специально попросил вариант решения без присвоения одного свойства другому. Почему? -тому есть две причины.
1. В примере я упрощенно написал
m[5]='mama';
m[6]='papa';
m[7]='deda';
Но вместо 'mama' и 'papa' в данных свойствах могут храниться другие многомегабайтные объекты. Присвоение одного свойства другому приведет (я так интуитивно считаю) к перегону больших массивов информации по памяти из одного места в другое. А если в объекте
m несколько тысяч свойств, то процедура будет работать долго.
2. Показанный мною пример - это упрощенный случай задачи (тоже несколько упрощаю формулировку):
Есть объект m={}; причем подчеркиваю, что это не массив m=[];
Данный объект содержит тысячу свойств m[1]...m[1000].
Необходимо удалить 100-е свойство из данного объекта, и все свойства, что имеют ключ > 100 сместить "вниз", в сторону меньших индексов. То есть 101-е свойство должно стать сотым, 102-е перейти на 101-е,... 1000-е перейти на 999-е.
На ум приходит организовать цикл - перебор свойств и "перенос" данных из одного свойства в другое:
for (var key in m) m[key-1] = m[key];
Это работает! Однако, как всегда кто-нибудь это обезобразит! Проверка в разных браузерах показала, что
-перебор от млаших к старшим
key идет только в Opera и Google Chrome.
-в Fire Fox перебор идет в том же порядке, в котором шло присвоение свойств
-в IE также как и в Fire Fox перебор идет в том же порядке, в котором шло присвоение свойств, однако после прохода последнего элемента, созданного до цикла начинается просмотр элементов, созданных в цикле (что приводит к зависанию...)
т.е. если присвоение было не последовательно в порядке возрастания ключей
m[7]='deda';
m[6]='papa';
m[5]='mama';
m[1]='1111';
m[17]='1717';
m[2]='2222';
m[25]='2525';
m[3]='3333';
то Fire Fox и IE дадут кашеобразный результат.