2016-11-11 104 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'conversation'的名称和对象'person'的名称来构建结果对象?

此外,对话或人的长度可以是任意长度。如果可能的话 纯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)

编辑: 如果仅仅变量名的变化,这是属性名称保持不变或有某种独特的键,你可以使用一个对对象的关键环

例如:

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名称的确定是问题。如果'对话'改变并成为'talktome'会发生什么?正如我刚才提到的那样,它是我通过网络接收的动态JS,在运行时我不知道变量的名称。我将不得不解析收到的JS代码,并找出(不知何故)var名称。或者,我回到发给我的JS的发起者,并要求他们发送一个定义json对象。 – Rory

+0

您可以使用for循环迭代对象的键(这是变量名称)。 –

3

试试吧

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

动态

var result = {} 

result['person'] = person 

resilt.person = person 
+0

检查警报(result.person) –

+0

必须动态的不能硬编码的名称,必须从变量推断。 – 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

但它不是动态的:var结果= { “对话”:谈话, “人”:人 } – Rory