Необходимо обратиться к вложенному свойству объекта js, имя которого задано переменной. Общая картина такова:
Есть объект, имеющий 3 свойства. При этом третье свойство может иметь неограниченное количество вложенных свойств.
Нужно добавить к этому третьему свойству объекта новое вложенное свойство.
Насколько я поняла, мне необходимо сначала посчитать количество вложенных свойств объекта. Что-то вроде этого:
var x = Object.keys(имя_объекта).lenth;
только для вложенных свойств.
Вопрос 1: Можно ли написать так?
var x = Object.keys(имя_объекта)[2].lenth;
var x++;
Вопрос 2: Как мне теперь добавить новое вложенное свойство (имя/номер которого задано в переменной x) и записать в него значение?
Надеюсь, мой вопрос можно понять. Заранее спасибо за помощь!
Пример объекта, в который нужно добавить новое свойство (например, 4):
var order = {
name: "Петя",
phone: "+79211234567",
1:{'<tr><td>Однокомнатная квартира</td><td>метро Пионерская</td><td>пр.Королёва, 35</td>С мебелью<td>Все есть, пешком от метро, залог</td></tr>'},
2:{'<tr><td>Однокомнатная квартира</td><td>метро пр.Большевиков</td><td>ул.Ворошилова, 12</td>С мебелью<td>Стеклопакеты, паркет, посудомоечная машина</td></tr>'},
3:{'<tr><td>Студия</td><td>метро Московская</td><td>ул.Типанова, 4</td>Пустая<td>Для семейной пары</td></tr>'}
};
Как вариант, можно свойства объекта назвать flat1, flat2, .... flat4
Для вашего конкретного случая, это делается так
var order = {
name: "Петя",
phone: "+79211234567",
1: 'some data',
2: 'some data',
3: 'some data',
};
function addNumKey(obj, val) {
const numKeys = Object.keys(obj)
.filter(key => !isNaN(key)) // нужны только числовые ключи
.map(Number) // делаем их настоящими числами
// сортируем на всякий случай
// ( в обратном порядке, что бы легче получить максимальный элемент, он будет первым
.sort((a, b) => b - a);
const nextKeyIndex = numKeys[0] + 1;
obj[nextKeyIndex] = val;
}
addNumKey(order, 'new value');
console.log(order);
Но, как написали в другом ответе, лучше для этого использовать массив, так как операция упрощается в разы.
Для такой задачи используют обычный массив, так:
let order = {
name: "Петя",
phone: "+79211234567",
trs: [
'<tr><td>Однокомнатная квартира</td><td>метро Пионерская</td><td>пр.Королёва, 35</td>С мебелью<td>Все есть, пешком от метро, залог</td></tr>',
'<tr><td>Однокомнатная квартира</td><td>метро пр.Большевиков</td><td>ул.Ворошилова, 12</td> мебелью<td>Стеклопакеты, паркет, посудомоечная машина</td></tr>',
'<tr><td>Студия</td><td>метро Московская</td><td>ул.Типанова, 4</td>Пустая<td>Для семейной пары</td></tr>',
],
};
let newRow = '<tr><td colspan="5">Четвертая строка!</td></tr>';
order.trs.push( newRow );
console.log( order.trs[0] );
console.log( order.trs[1] );
console.log( order.trs[2] );
console.log( order.trs[3] );
let bubu = document.getElementById('bubu');
bubu.innerHTML = order.trs.join("");
td {
padding: 4px;
border: 1px solid #b89868;
}
<table id="bubu"></table>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Загрузил код приложения с githab'а и не могу запустить у себя на компе
При помощи axiosget приходят данные в массив в стейте, структура массива выглядит так: