Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2014, 20:20
Интересующийся
Отправить личное сообщение для mrmammoth Посмотреть профиль Найти все сообщения от mrmammoth
 
Регистрация: 19.03.2014
Сообщений: 22

добавить элемент в объект. defineProperty
Здравствуйте
Есть, к примеру, такой код:

<script type='text/javascript'>
            a1 = {
                param1: "value1",
                param2: "value2",
                param3: new Object()

            };
            Object.defineProperty(a1, "param3", {
                subparam1: "vol1",
                subparam2: "vol2"

            });
            alert(a1.param3.subparam1);
        </script>

undefined

Чего не догоняю тут? Как сделать правильно?
Заранее благодарю.
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2014, 20:45
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Object..defineProperty работает совсем не так. И вообще, мне кажется, что достаточно сделать так:
var a1 = {
  param1: "value1",
  param2: "value2",
  param3: {
    subparam1: "vol1",
    subparam2: "vol2"
  }
};

alert(a1.param3.subparam1);
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2014, 21:01
Интересующийся
Отправить личное сообщение для mrmammoth Посмотреть профиль Найти все сообщения от mrmammoth
 
Регистрация: 19.03.2014
Сообщений: 22

Сообщение от Sweet Посмотреть сообщение
Object..defineProperty работает совсем не так. И вообще, мне кажется, что достаточно сделать так:
var a1 = {
  param1: "value1",
  param2: "value2",
  param3: {
    subparam1: "vol1",
    subparam2: "vol2"
  }
};

alert(a1.param3.subparam1);
так работает. Но мне в конечном итоге надо получить аналог php. и добавлять элементы к массиву param3
array (
        'param1' => 'volume1',
        'param2' => 'volume2',
        'param3' => 
        array(
                'subparam1'   => 'vol1',
                'subparam2'   => 'vol2'
               );
);

Как сделать на js пока не знаю
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2014, 21:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

mrmammoth,
var  a1 = {
                param1: "value1",
                param2: "value2"

            };
            a1["param3"] = {
                'subparam1': "vol1",
                'subparam2': "vol2"

            };
            alert(a1.param3.subparam1);
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2014, 22:51
Интересующийся
Отправить личное сообщение для mrmammoth Посмотреть профиль Найти все сообщения от mrmammoth
 
Регистрация: 19.03.2014
Сообщений: 22

спасибо

...но так добавляется только 1 элемент. если пытаться сделать так ещё раз, то новые значения a1["param3"] просто заменяют старые. Как добавить элемент?
array (
	        'param1' => 'volume1',
	        'param2' => 'volume2',
	        'param3' =>
	        array(
                   array(
	                 'subparam1'   => 'vol1',
	                 'subparam2'   => 'vol2'
	                  ),
                   array(
	                 'subparam1'   => 'vol1',
	                 'subparam2'   => 'vol2'
	                  ),
// .........................................................//
                   array(
	                 'subparam1'   => 'vol1',
	                 'subparam2'   => 'vol2'
	                  )
                   );
	);

как-то так по аналогии

Последний раз редактировалось mrmammoth, 22.03.2014 в 23:35.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2014, 00:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

mrmammoth,
что вы хотите получить и из чего ? ато я вас непонимаю
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2014, 00:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

mrmammoth,
var  a1 = {
                param1: "value1",
                param2: "value2",
                param3:[]
            };
            a1["param3"].push({
                "subparam1": "vol1",
                "subparam2": "vol2"

            } );
            a1["param3"].push({
                "subparam1": "vol3",
                "subparam2": "vol4"

            } )
            alert(a1.param3[1]["subparam1"]);
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2014, 00:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

mrmammoth,
var  a1 = {
                param1: "value1",
                param2: "value2"

            };
            a1["param3"] = {
                'subparam1': "vol1",
                'subparam2': "vol2"

            };
            a1["param3"]['subparam3']= "vol3"
            alert(a1.param3.subparam3);
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2014, 01:08
Интересующийся
Отправить личное сообщение для mrmammoth Посмотреть профиль Найти все сообщения от mrmammoth
 
Регистрация: 19.03.2014
Сообщений: 22

Задача у меня такая:
Вот исходный массив php
$str = json_encode(
array(  
        array (
             'param1'  => 'volume1',
             'param2' => 'volume2',
             'param3'  => 
             array(
            
                     array(
                               'subparam1'   => 'vol1',
                               'subparam2'   => 'vol2'
                     ),
                    array(
                               'subparam1'   => 'vol1',
                               'subparam2'   => 'vol2'
                     )
             ) 
        ),
        array (
             'param1'  => 'volume1',
             'param2' => 'volume2',
             'param3'  => 
             array(
            
                     array(
                               'subparam1'   => 'vol1',
                               'subparam2'   => 'vol2'
                     ),
                    array(
                               'subparam1'   => 'vol1',
                               'subparam2'   => 'vol2'
                     )
             ) 
        )
));


$str я передаю в js
Нужно, чтобы функция doAdd добавила элемент в массив param3 и вернула весь массив в php
function doAdd(str) {
            arr = JSON.parse(str);
            i=0; /* пусть в 1-й элемент */

                    /* даёт ошибку элемент не поддерживает push*/
                    arr[i]['param3'].push({
                        subparam1: 'vol1',
                        subparam2: 'vol2'
                        
                    });
           
            return JSON.stringify(arr);
}

как-то так

Последний раз редактировалось mrmammoth, 23.03.2014 в 01:15.
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2014, 01:21
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

mrmammoth,
передавай элемент на сервер и там добавляй
не зачем впустую гонять ненужные данные
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавить свойство объекта в объект в объекте ? %) mitiya Общие вопросы Javascript 1 07.10.2012 14:46
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33
как в динамически добавляемый элемент добавить еще несколько? sadonn Элементы интерфейса 1 29.05.2010 12:07
Как добавить элемент в обьект json Юрий Игоревич Общие вопросы Javascript 2 26.10.2009 15:01
Добавить активный элемент Wirty jQuery 5 09.08.2009 16:06