2013-09-25 5 views
1

У меня есть одна функция, в которой я выполняю итерацию через объект данных, который я извлек из базы данных. В цикле foreach я пытаюсь создать один объект (триггер) и нажимая его на другую переменную (Geo), которую я буду использовать для ввода другой переменной (триггеры). Ниже код-Как перенести один объект Javascript в другой объект Javascript?

var Geo={}; 

array.forEach(this.cityData,lang.hitch(this, function(data,i){ 
    var trigger = { 
     type: "Inside", 

     event: { 
      name: data.Name, 
      address:data.Address 
     } 
    }; 

    var Location= "Location_"+i; 
    Geo.Location=trigger; // pushing trigger in Geo variable 
})); 

var triggers = { 
    Geo //using Geo in trigger 
}; 

является var triggers={Geo}; эквивалентно это ниже код?

И мой код нажатия Geo.Location=trigger; правильный?

var triggers = { 
    Geo: { 
     Location_1: trigger1, 
     Location_2: trigger2 ...... and so on... 
    } 
}; 
+0

hi, возможно, дубликат этой темы PLS проверить .. http://stackoverflow.com/questions/11078630/adding-data-dynamically-from-one-json-object-to-another – codebreaker

+0

Вы, похоже, хотите, чтобы оба объекты внутри друг друга, что не имеет большого смысла. – Pointy

+0

У вас есть точно 0 JSON. –

ответ

3

Я не тестировал его, но похоже, что он почти такой же. Только одна вещь: Это должно дать вам исключение:

var triggers = { 
     Geo //using Geo in trigger 
    }; 

Заявление должно быть

var triggers = { 
     'Geo': Geo //using Geo in trigger 
    }; 

иначе Триггеры не будет иметь свойство Geo.

Geo.Location=trigger; просто отлично.

0

Свойство в объекте, доступном через точечную нотацию (obj.property) всегда рассматриваются просто как имя propoerty - т.е. переменные не оценивал. У вас могут быть динамические имена свойств, используя нотацию скобок: obj [property], которые преобразуют «свойство» в строку (при необходимости разрешая значение переменной) и используют это как фактическое имя свойства.

Итак, попробуйте Changin:

Geo.Location 

к:

Geo[Location] 

Edit: Я не уверен, что ожидаемый конечный результат, но если вы хотите, чтобы достичь объекта как показанном в вашем последнем кодовом блоке, должен быть приведен правильный синтаксис:

triggers.Geo = Geo; 

снова, учитывая тот факт, что «Geo» в форме точечной нотации является просто строковым именем свойства и не имеет никакого отношения к переменной с тем же именем.

+0

не верно, Geo.Location = x и Geo ["Location"] = x делает то же самое, он расширяет объект Geo с помощью свойства Location. Geo [Location] = x расширяет объект Ge анонимой функцией, возвращающей x (в Chrome и не работает в IE) – MichaC

+0

@ Ela: Я согласен с вашим первым аффирмацией (Geo.Location = x и Geo ["Location" ] = x эквивалентны), но я не вижу никаких доказательств правильности второго - Geo [Location] = x добавит свойство в объекте, имеющем имя, равное * значению * переменной Location (в примере с помощью op это будет циклически изменяться как «Location_1», «Location_2» и т. д.), - я сделал быстрый скрипт, чтобы показать, что я имею в виду: http://jsfiddle.net/TtJMn/. Или, может быть, я неправильно понял, что вы имеете в виду? – Grim

Смежные вопросы