добавить элемент в объект. 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 Чего не догоняю тут? Как сделать правильно? Заранее благодарю. |
Object..defineProperty работает совсем не так. И вообще, мне кажется, что достаточно сделать так:
var a1 = {
param1: "value1",
param2: "value2",
param3: {
subparam1: "vol1",
subparam2: "vol2"
}
};
alert(a1.param3.subparam1);
|
Цитата:
array (
'param1' => 'volume1',
'param2' => 'volume2',
'param3' =>
array(
'subparam1' => 'vol1',
'subparam2' => 'vol2'
);
);
Как сделать на js пока не знаю |
mrmammoth,
var a1 = {
param1: "value1",
param2: "value2"
};
a1["param3"] = {
'subparam1': "vol1",
'subparam2': "vol2"
};
alert(a1.param3.subparam1);
|
спасибо
...но так добавляется только 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,
что вы хотите получить и из чего ? ато я вас непонимаю |
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"]);
|
mrmammoth,
var a1 = {
param1: "value1",
param2: "value2"
};
a1["param3"] = {
'subparam1': "vol1",
'subparam2': "vol2"
};
a1["param3"]['subparam3']= "vol3"
alert(a1.param3.subparam3);
|
Задача у меня такая:
Вот исходный массив 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,
передавай элемент на сервер и там добавляй не зачем впустую гонять ненужные данные |
Цитата:
дело в том, что пользователь может сделать несколько разных действий как то добавить, удалить, изменить в том числе и массив верхнего уровня. все его действия будут в $str и затем одним Submit передастся на сервер. можно и по одному элементу, но тогда пользователю придётся нажимать submit после каждого своего действия. действий может быть много. это время. |
/* даёт ошибку элемент не поддерживает push*/
arr[i]['param3'].push({
arr[i]['param3'] = [];
arr[i]['param3'].push({
...
|
mrmammoth,
function doAdd(str) {
var arr = JSON.parse(str);
!arr['param3'] && (arr['param3'] = [])
arr['param3'].push({
subparam1: 'vol1',
subparam2: 'vol2'
});
return JSON.stringify(arr);
}
alert(doAdd('{"param1":"value1","param2":"value2"}'))
|
Poznakomlus,
рони, работает и так и так, но если в param3 уже были какие-то элементы - они замещаются новыми, а хотелось бы добавить. |
mrmammoth,
так укажите куда добавить то и добавте -- нарисуйте без php что было и чего хотите достичь чтоб мы вас поняли |
имеем на входе:
[{"param1":"volume1","param2":"volume2","param3" :[{"subparam1":"vol1","subparam2":"vol2"}]}] надо после 1-й отработки скрипта: [{"param1":"volume1","param2":"volume2","param3" :[{"subparam1":"vol1","subparam2":"vol2"},{"subparam 1":"vol1","subparam2":"vol2"}]}] после 2-й [{"param1":"volume1","param2":"volume2","param3" :[{"subparam1":"vol1","subparam2":"vol2"},{"subparam 1":"vol1","subparam2":"vol2"},{"subparam1":"vol1", "subparam2":"vol2"}]}] и т.д. |
arr[i]['param3'] = arr[i]['param3'] || []; или опять не понял |
mrmammoth,
<script>
var arr = [{"param1":"volume1","param2":"volume2"}]
function doAdd(params) {
!arr[0]['param3'] && (arr[0]['param3'] = [])
arr[0]['param3'].push(params);
return JSON.stringify(arr);
}
document.write(doAdd({"param1":"value1","param2":"value2"})+"<br>")
document.write(doAdd({"param1":"value1","param2":"value2"})+"<br>")
document.write(doAdd({"param1":"value1","param2":"value2"})+"<br>")
</script>
|
рони,
Poznakomlus, Спасибо за помощь, всё функционирует! |
| Часовой пояс GMT +3, время: 11:17. |