2016-11-11 2 views
1

У меня есть переменная с именем onversation, который содержит следующее:JavaScript построить динамический объект

{ 
    "conversationId": "adbabc54-3308-436d-a48b-932f4010d3c6", 
    "participantId": "415651e6-f0a5-4203-8019-4f88c3ed9cd5" 
} 

У меня есть объект с именем person, который содержит следующее:

{ 
    firstname: "fred", 
    surname: "smith", 
    age: "21", 
    gender: "male" 
} 

То, что я хотел бы, чтобы имеют комбинированный объект под названием result, который выглядит следующим образом:

result { 
    conversation { 
     conversationId : adbabc54-3308-436d-a48b-932f4010d3c6, 
     participantId : 415651e6-f0a5-4203-8019-4f88c3ed9cd5 
    }, 
    person { 
     firstname: "fred", 
     surname: "smith", 
     age: "21", 
     gender: "male" 
    } 
} 

Как мне сделать это динамически, с помощью чего объект результата строится с использованием имени var 'convers' и имени объекта 'person'?

Кроме того, длина беседы или человека может быть любой длины. Pure JavaScript, если это возможно, но можно использовать подчеркивание и т.д.

+1

Вы пробовали просто делать 'вар результат = {разговор: разговор, лицо: лицо};'? – Archer

ответ

2

Если я правильно понимаю ваш вопрос, вы можете использовать объект сокращенной нотацию, который поддерживается в большинстве браузеров (Вероятно, все они, кроме IE11) для упрощения вашего решение еще больше:

var conversation = 
 
{ 
 
    conversationId : 'adbabc54-3308-436d-a48b-932f4010d3c6', 
 
    participantId : '415651e6-f0a5-4203-8019-4f88c3ed9cd5' 
 
}; 
 
var person = 
 
{ 
 
    firstname: "fred", 
 
    surname: "smith", 
 
    age: "21", 
 
    gender: "male" 
 
}; 
 

 
var result = { conversation, person } 
 

 
console.log(result)

EDIT: Если только переменные изменения имени, и это имена свойств остаются теми же или иметь какой-то уникальный ключ, вы можете использовать цикл на клавишах объекта.

Например:

var someConversationVariableName = 
 
{ 
 
    conversationId : 'adbabc54-3308-436d-a48b-932f4010d3c6', 
 
    participantId : '415651e6-f0a5-4203-8019-4f88c3ed9cd5' 
 
}; 
 
var somePersonVariableName = 
 
{ 
 
    firstname: "fred", 
 
    surname: "smith", 
 
    age: "21", 
 
    gender: "male" 
 
}; 
 

 
var result = { someConversationVariableName, somePersonVariableName } 
 

 
for (key in result) { 
 
    if(result[key]['conversationId']) { 
 
    console.log(`Found conversation object. It's name is: ${key}`); 
 
    } 
 
    else if(result[key]['firstname']) { 
 
    console.log(`Found person object. It's name is: ${key}`); 
 
    } 
 
} 
 

+1

Да, axlj и сами выложили решения, которые работают, но динамика определение имен var является проблемой. Что произойдет, если «разговор» изменится и станет «разговорным»? Как я уже упоминал, это динамический кусок JS, который я получаю по проводу, во время выполнения я не знаю названий варов. Мне придется разбирать полученный JS-код и выработать (как-то) имена var. В качестве альтернативы, я возвращаюсь к создателям JS, отправленным мне, и попрошу их отправить объект json определения. – Rory

+0

Вы можете перебирать ключи объекта (которые являются именами переменных), используя для цикла. –

3

Попробуйте это

var result = { 
'conversation': conversation, 
'person': person 
} 

Dynamic

var result = {} 

result['person'] = person 

или

resilt.person = person 
+0

Проверить это предупреждение (результат) –

+0

Должен быть динамическим, не может быть жестко закодирован, имена должны быть выведены из vars. – Rory

+0

Я обновил ответ –

1

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

var conversation = 
{ 
    conversationId : 'adbabc54-3308-436d-a48b-932f4010d3c6', 
    participantId : '415651e6-f0a5-4203-8019-4f88c3ed9cd5' 
}; 
var person = 
{ 
    firstname: "fred", 
    surname: "smith", 
    age: "21", 
    gender: "male" 
}; 

var result = {}; 

result['conversation'] = conversation; 
result['person'] = person; 

console.log(result); 
+0

Почти :-) Но я не могу иметь имена жестко закодированные. Javascript, который я получаю, сам по себе является динамикой (трудно объяснить). Но я получаю блок кода, отправленный с уже имеющимися именами var. Я пытаюсь построить объект результата из этого блока кода, следовательно, динамическое именование ... если это имеет смысл – Rory

+0

А я вас слышу. То, чего вы пытаетесь достичь, невозможно в глобальном масштабе.Вам нужно будет определить объект, подобный показанному выше, а затем прокрутить все ключи этого объекта и поместить дочерние объекты туда, где вы хотите. дайте мне знать, если это имеет смысл. – axlj

+0

Да, это то, что я (мы) думал – Rory

0

Это должно работать: -

var conversation = 
{ 
    "conversationId": "adbabc54-3308-436d-a48b-932f4010d3c6", 
    "participantId": "415651e6-f0a5-4203-8019-4f88c3ed9cd5" 
} 

var person= 
{ 
    firstname: "fred", 
    surname: "smith", 
    age: "21", 
    gender: "male" 
} 

var result = { 
'conversation': conversation, 
'person': person 
} 
+0

, но это не динамический: вар результат = { «разговор»: разговор, «человек»: человек } – Rory

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