Как установить объект JSON равным другому объекту JSON в объявлении родителя

Я новичок в javascript и json и возиться с некоторым кодом.

Это формат моего объекта JSON

messageData = {
     "attachment": {
         "type": "template",
         "payload": {
             "template_type": "generic",
             elements: [{
                 title: "titleOne",
                 subtitle: "subtitleOne"
             }, {
                 title: "titleTwo",
                 subtitle: "subtitleTwo"
             }]
         }
     }
 }

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

titles = {} //100 objects with different titles and subtitles.

Есть ли способ реализовать эту логику, показанную ниже?

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

Правильно все форматировать? Спасибо за помощь!

1 ответ

Решение

У вас есть переменная titles которому назначен массив объектов. Что-то вроде:

var titles = [{...}, {...}, ...];

Позже вы хотите назначить этот массив (в настоящее время назначен переменной titles) к свойству объекта (в данном случае elements):

var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements // <-- here
        } 
    }
}

(Обратите внимание, что я удалил двойные кавычки из имен свойств, они не являются необходимыми, поскольку они имеют действительные обозначения)

Как вы и подозревали, нет ничего проще, чем это:

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

Этого было бы достаточно в качестве ответа, но давайте теперь сделаем небольшой шаг назад: в javascript практически все является объектом (я немного упрощаю здесь, например, строки не являются объектами, но я приглашаю вас узнать больше самостоятельно). Но да, как ни странно на первый взгляд, массив - это объект.

Еще одна вещь, которую нужно знать, это то, что в javascript объекты назначаются по ссылке. Это означает, что если вы измените оригинал titles массив, elements Массив также будет изменен. Это просто два имени, указывающие на один и тот же объект.

В вашем конкретном случае эта деталь может не иметь значения, но если вы хотите разделить жизнь titles а также elements Вам необходимо клонировать исходный массив, прежде чем назначить его снова. И самый быстрый путь проходит через преобразование JSON:

var titles_0 = JSON.parse(JSON.stringify(titles));
var messageData = {
    attachment: {
        type: "template",
        payload: {
            template_type: "generic", 
            elements: titles_0
        } 
    }
}
Другие вопросы по тегам