Javascript 如何将一个JSON对象设置为父对象中的另一个JSON对象';s声明

Javascript 如何将一个JSON对象设置为父对象中的另一个JSON对象';s声明,javascript,json,facebook-messenger,Javascript,Json,Facebook Messenger,我对javascript和json不熟悉,对一些代码也不熟悉 这是我的JSON对象的格式 messageData = { "attachment": { "type": "template", "payload": { "template_type": "generic", elements: [{ title: "titleOne",

我对javascript和json不熟悉,对一些代码也不熟悉

这是我的JSON对象的格式

messageData = {
     "attachment": {
         "type": "template",
         "payload": {
             "template_type": "generic",
             elements: [{
                 title: "titleOne",
                 subtitle: "subtitleOne"
             }, {
                 title: "titleTwo",
                 subtitle: "subtitleTwo"
             }]
         }
     }
 }
我希望通过循环将一个对象设置为一个数组,该数组包含更多的title和subtitle对象,而不是将每个title和subtitle对象单独添加到元素中。假设我有对象标题:

titles = {} //100 objects with different titles and subtitles.
有没有一种方法可以实现如下所示的逻辑

 messageData = {
            "attachment": {
                "type": "template",
                "payload": {
                    "template_type": "generic", 
                     elements = titles
                } 
            }
        }

正确格式化所有内容?谢谢你的帮助

您有一个变量
titles
,它有一个分配给它的对象数组。比如:

var titles = [{...}, {...}, ...];
稍后,您需要将此数组(当前分配给变量
titles
)分配给对象的属性(在本例中为
elements
):

这将是一个足够的答案,但是现在让我们后退一小步:在JavaScript中,几乎所有的东西都是一个对象(我在这里简化了一点,例如,字符串不是对象,但是我邀请你自己去发现更多)。但是是的,数组是一个对象,一开始听起来很混乱

要知道的另一件事是,在javascript中,对象是通过引用分配的。这意味着,如果修改原始的
标题
数组,那么
元素
数组也将被修改。它们只是指向同一个物体的两个名字

在您的特定情况下,此细节可能无关紧要,但如果要将
标题
元素
的生命周期分开,则需要克隆原始数组,然后才能再次分配它。最快的方法是通过JSON转换:

var titles_0 = JSON.parse(JSON.stringify(titles));
var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements: titles_0
        } 
    }
}

您有一个变量
titles
,它有一个分配给它的对象数组。比如:

var titles = [{...}, {...}, ...];
稍后,您需要将此数组(当前分配给变量
titles
)分配给对象的属性(在本例中为
elements
):

这将是一个足够的答案,但是现在让我们后退一小步:在JavaScript中,几乎所有的东西都是一个对象(我在这里简化了一点,例如,字符串不是对象,但是我邀请你自己去发现更多)。但是是的,数组是一个对象,一开始听起来很混乱

要知道的另一件事是,在javascript中,对象是通过引用分配的。这意味着,如果修改原始的
标题
数组,那么
元素
数组也将被修改。它们只是指向同一个物体的两个名字

在您的特定情况下,此细节可能无关紧要,但如果要将
标题
元素
的生命周期分开,则需要克隆原始数组,然后才能再次分配它。最快的方法是通过JSON转换:

var titles_0 = JSON.parse(JSON.stringify(titles));
var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements: titles_0
        } 
    }
}

你能解释一下你的
标题
对象/数组是什么样子的吗?您不能将
标题
分配给
元素
?您是否尝试复制数组,但使用相同的
{title,subtitle}
对象?还是需要克隆整个结构?@mjsarfatti Titles是包含title和subtitle对象的多个对象的数组。是的,我就是这么想的。但我不知道如何分配它。它像“elements”=titles那样简单吗?@nrabinowitz我想复制具有相同{title,subtitle}结构的数组,并将其设置为等于“elements”,而不是逐个手动设置标题的每个索引,那么您编写的已经是您的答案:)
elements:titles
。Ps:在这种情况下,不需要双引号引用属性名称。你能澄清一下你的
标题
对象/数组是什么样子吗?您不能将
标题
分配给
元素
?您是否尝试复制数组,但使用相同的
{title,subtitle}
对象?还是需要克隆整个结构?@mjsarfatti Titles是包含title和subtitle对象的多个对象的数组。是的,我就是这么想的。但我不知道如何分配它。它像“elements”=titles那样简单吗?@nrabinowitz我想复制具有相同{title,subtitle}结构的数组,并将其设置为等于“elements”,而不是逐个手动设置标题的每个索引,那么您编写的已经是您的答案:)
elements:titles
。注:在这种情况下,不需要重复引用属性名称。谢谢您的详细回答!谢谢你的详细回答!