Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   добавить элемент в объект. defineProperty (https://javascript.ru/forum/misc/45972-dobavit-ehlement-v-obekt-defineproperty.html)

mrmammoth 22.03.2014 20:20

добавить элемент в объект. 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

Чего не догоняю тут? Как сделать правильно?
Заранее благодарю.

Sweet 22.03.2014 20:45

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

alert(a1.param3.subparam1);

mrmammoth 22.03.2014 21:01

Цитата:

Сообщение от Sweet (Сообщение 303816)
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 пока не знаю

рони 22.03.2014 21:21

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

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

            };
            alert(a1.param3.subparam1);

mrmammoth 22.03.2014 22:51

спасибо

...но так добавляется только 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'
	                  )
                   );
	);

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

рони 23.03.2014 00:17

mrmammoth,
что вы хотите получить и из чего ? ато я вас непонимаю

рони 23.03.2014 00:23

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"]);

рони 23.03.2014 00:28

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

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

            };
            a1["param3"]['subparam3']= "vol3"
            alert(a1.param3.subparam3);

mrmammoth 23.03.2014 01:08

Задача у меня такая:
Вот исходный массив 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);
}

как-то так

Vlasenko Fedor 23.03.2014 01:21

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


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