Как установить объект 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
}
}
}