Как переименовать свойство объекта?
// создаем объект var m={}; // создаем у него три свойства и присваиваем им значения m[5]='mama'; m[6]='papa'; m[7]='deda'; // или так: m.x='mama'; m.y='papa'; m.z='deda'; alert(m[4] + ' ' + m[5] + ' ' + m[6] + ' ' + m[7]); // undefined mama papa deda // как переименовать свойство "5" в свойство "4", чтобы при обращении к m[4] мы бы получили значение из бывшего m[5], а m[5] типа исчезло вообще? // имеется ввиду не копирование m[4]=m[5]; |
перезаписываете, удаляете
m = {}; m.a = 'a'; m.b = 'b'; m.c = 'c'; m.b = m.a; delete m.a; console.log(m); |
Цитата:
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 дадут кашеобразный результат. |
Цитата:
т.е. многомегабайтовый объект останется валяться там, где валялся. чтобы легко менять ключи, организуйте |
Цитата:
|
Цитата:
var m1 = {}; var m2 = {}; var m3 = {}; m1[5]='mama'; m2=m1; // присвоение по ссылке m3[5] = m1[5]; // присвоение не по ссылке (копирование/дублирование данных) m1[5] = 'privet'; // изменим объект m1 - повлияет ли он на m2 и m3? alert('m1[5]=' + m1[5] + ' m2[5]=' + m2[5] + ' m3[5]=' + m3[5]); // выведет: m1[5]=privet m2[5]=privet m3[5]=mama |
Цитата:
2. у меня объект m={}; |
Цитата:
Учим матчасть, короче. |
Допишу примерчик ещё:
var m1 = {}; var m2 = {}; var m3 = {}; m1[5]={"bla": 123}; m2=m1; m3[5] = m1[5]; m1["5"].bla = 12345 alert(m1[5].bla +" "+ m2[5].bla + " " + m3[5].bla) |
Маэстро,
мдаа залёт конечно такой бред нести, ну ладно: Цитата:
Цитата:
2 Цитата:
3 Цитата:
|
Часовой пояс GMT +3, время: 17:49. |