Как скопировать объект JavaScript в другой объект? - PullRequest
3 голосов
/ 11 мая 2010

Скажите, что я хочу начать с пустого объекта JavaScript:

me = {};

И тогда у меня есть массив:

me_arr = new Array();
me_arr['name'] = "Josh K";
me_arr['firstname'] = "Josh";

Теперь я хочу добавить этот массив в объект, чтобы я мог использовать me.name для возврата Josh K.

Я пытался:

for(var i in me_arr)
{
    me.i = me_arr[i];
}

Но это не дало желаемого результата. Это возможно? Моя главная цель - обернуть этот массив в объект JavaScript, чтобы я мог передать его в сценарий PHP (через AJAX или любой другой) как JSON.

Ответы [ 8 ]

6 голосов
/ 11 мая 2010

Поскольку имя свойства также является переменной, цикл должен выглядеть следующим образом:

for(var i in me_arr)
{
    me[i] = me_arr[i];
}

Чтобы узнать больше о JSON, вы можете найти эту статью полезной.

2 голосов
/ 11 мая 2010

Возможно, вы ищете что-то столь же простое, как json_encode

http://php.net/manual/en/function.json-encode.php

1 голос
/ 04 сентября 2012

Самый простой способ действительно клонировать объект, не беспокоясь о ссылках, это

var newObj = JSON.parse(JSON.stringify(oldObj));

Очень удобно, но не жизнеспособно, если у вас есть функции в ваших объектах.

1 голос
/ 11 мая 2010

В приведенном выше коде вы устанавливаете свойство me.i снова и снова. Чтобы сделать то, что вы описываете здесь, попробуйте это:

for(var i in me_arr)
{
    me[i] = me_arr[i];
}
0 голосов
/ 11 мая 2010

Почему бы вам просто не сделать:

me['name'] = "Josh K";
me['firstname'] = "Josh";


Это так же, как

me.name = "Josh K";
me.firstname = "Josh";

Прочитайте эту интересную статью о "ассоциативных массивах в JS" .

0 голосов
/ 11 мая 2010

Вы должны проверить JSON в JavaScript . Загружается библиотека JSON , которая может помочь вам построить ваши объекты JSON.

0 голосов
/ 11 мая 2010

Во-первых, "me_arr" не должен быть массивом, поскольку вы на самом деле не используете его как единое целое.

var me_arr = {};
me_arr.name = "Josh K";
me_arr.firstname = "Josh";

Или, короче:

var me_arr = { "name": "Josh K", "firstname": "Josh" };

Теперь ваша петля почти правильная:

for (var key in me_arr) {
  if (me_arr.hasOwnProperty(key))
    me[key] = me_arr[key];
}

Я не уверен, какой смысл иметь вначале две переменные, но неважно. Также: убедитесь, что вы объявляете переменные с var !!

0 голосов
/ 11 мая 2010

Используйте json_encode() в готовом массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...